Данные Args События Тестирования NUnit
Я всегда обходил эту проблему, к сожалению, используя события меньше. Однако на этот раз я придумал отличный трюк, однако я не думаю, что следующий подход будет считаться правильным. Существует ли рекомендуемый метод для достижения тех же результатов?
NB без while Вы получаете исключение нулевой ссылки на _args.Приспособление, если вы не остановитесь на нем - состояние гонки.
private Parser _parser;
private ParsedArgs _args;
[TestFixtureSetUp]
public void Setup()
{
_parser = new Parser();
_parser.DataParsed += DataParsed;
}
void DataParsed(object sender, ParsedArgs e)
{
_args = e;
}
[Test]
public void TestDocParse()
{
_parser.ParseFixture(File.ReadAllText(EventDataPath));
while (_args == null || _args.Fixture == null) { }
Assert.IsNotNull(_args.Fixture);
var fixture = _args.Fixture;
Assert.AreEqual("2F7PY1662477", fixture.Id);
}
Я обнаружил, что следующее привело к необходимости придумать потенциально неточная шкала времени для завершения синтаксического анализа...
Я стремлюсь проверить, что fixture.Id равно "2F7PY1662477".
Спасибо
2 ответа:
Я бы сначала отделил тест / приспособление от необходимости чтения какого-то файла. Я бы просто отправил консервированные данные в ParseFixture-вы либо проверяете, что можете разобрать файл, либо проверяете, вызвано ли ожидаемое событие.
Я бы тогда избегал разбора в фоновом режиме. Это осветит состояние гонки, потому что вы будете делать все синхронно.
Тогда у меня будет флаг, который сигнализирует, произошло ли действительное событие.
Для Пример:
private bool eventOccurred; private void DataParsed(object sender, ParsedArgs e) { eventOccurred = e.Id == "2F7PY1662477"; } [Test] public void TestDocParse() { _parser.ParseFixture(TextToParse); Assert.IsTrue(eventOccurred); }