У меня есть куча модульных тестов, которые работают над классом, который выполняет некоторые задачи асинхронно. В настоящее время я настроил класс, а затем выполнил эту функцию. Затем я перехожу к блокировке до тех пор, пока выполнение не будет завершено, а затем проверьте данные, которые мне нужны. Есть ли лучший способ, которым я могу это сделать?Тестирование класса, использующего асинхронное выполнение
До сих пор мои тесты похожи на это:
vp.Reset(); //vp is my virtual machine
bool wait = true;
Dictionary<short, Command> commands = new Dictionary<short, Command>();
commands.Add(0, CommandFactory.CreateInputCommand(0, 0));
commands.Add(1, CommandFactory.CreateHaltCommand());
vp.OnHalted +=() =>
{
wait = false;
};
vp.InputChannels[0] =() => { return 2; };
vp.CurrentProgram = commands;
vp.ExecuteTillHalt();//asynchronous execution of program. There's also a way to make it execute synchronously
while (wait) ;
Assert.AreEqual(vp.Registers[0], 2);
Что происходит, у меня есть виртуальный процессор, который выполняет асинхронный код через повторяющийся таймер, который отключается при завершении выполнения. Я тестирую конкретные аспекты набора инструкций для своего процессора, создавая простые программы, загружая свою виртуальную машину с ними по одному, а затем выполняю выполнение асинхронов и проверяя результаты после их возвращения. Я предполагаю, что могу заставить его работать синхронно и отделить часть асинхронности от отдельного теста ... – RCIX
Это также ускорит ваше тестирование, так как ваши циклы синхронизации должны быть изменены с помощью конфигурации (в некотором роде). –