Тестирование класса, который использует асинхронное выполнение - PullRequest
1 голос
/ 05 октября 2009

У меня есть куча модульных тестов, которые работают с классом, который выполняет некоторые задачи асинхронно. В настоящее время я настраиваю класс, затем выполняю соответствующую функцию. Затем я вхожу в ожидание блокировки, пока выполнение не будет завершено, затем проверяю данные, которые мне нужны. Есть ли лучший способ, которым я могу это сделать?

Пока мои тесты выглядят примерно так:

    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);

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

Я вижу два теста, один для проверки того, что асинхронное действие запущено (что можно сделать с помощью имитации), а второй для проверки того, что действие, которое выполняется асинхронно, выполняется правильно при запуске, и вы можете выполнить последнее синхронно.

0 голосов
/ 05 октября 2009

Есть ли способ разбить это на два теста?

Вы можете проверить асинхронный аспект с помощью блока, а затем проверить данные как отдельную тестируемую функцию, которая не зависит от того, как она вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...