Я всегда обходил эту проблему, к сожалению, меньше используя события. Однако на этот раз я придумал отличный трюк, однако я не думаю, что следующий подход будет считаться правильным. Есть ли рекомендуемый метод для достижения тех же результатов?
NB Без while вы получите исключение нулевой ссылки для _args.Fixture, если только вы не установите на нем точку останова - состояние гонки.
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);
}
Я обнаружил, что следующее привело к необходимости придумать потенциально неточную шкалу времени для завершения синтаксического анализа...
Я стремлюсь проверить, что приспособление.Id равно «2F7PY1662477».
Спасибо
System.Threading.SpinWait.SpinUntil(() => _args != null && _args.Fixture != null, 30000);
для одного, просто чтобы убедиться, что ваш тест никогда не застрянет в цикле. Вы также можете использовать событие автоматического сброса или что-то в этом роде. - person vcsjones   schedule 10.07.2012