2014-11-21 5 views
1

В проекте # тестирования C, у меня есть этот тест:Как вы ждете задание при модульном тестировании?

[TestMethod] 
public void TestIfListFilled() 
{ 
    // arrange 
    byte stuffTypeID = 0; 
    List<Stuff> locationList = null; 

    // act 
    locationList = GetStuffListAsync(stuffTypeID); 

    // assert 
    Assert.IsTrue(locationList.Count > 0); 
} 

и метод GetStuffListAsync имеет эту подпись:

Task<List<Stuff>> GetStuffListAsync(Byte stuffTypeID) 

Теперь, моя первая догадка добавить await перед вызовом метода в мой метод тестирования. Однако я не могу добавить async в подпись моего тестового метода, иначе Visual Studio начнет жаловаться. Что я могу сделать, чтобы заполнить мой список до того, как будет выполнено утверждение?

ответ

7

Вы можете сделать свой блок тест async а:

[TestMethod] 
public async Task TestIfListFilled() 
{ 
    // arrange 
    byte stuffTypeID = 0; 

    // act 
    List<Stuff> locationList = await GetStuffListAsync(stuffTypeID); 

    // assert 
    Assert.IsTrue(locationList.Count > 0); 
} 

Заметим, что использование Result вместо легко может привести к тупиковой ситуации, в зависимости от контекста синхронизации ваш тест бегун установил вверх; вы можете закончить продолжение async-метода, ожидая возврата к потоку, который ожидает завершения асинхронного метода.

Обратите внимание на изменение типа возвращаемой в Task - это может быть использован блок тест бегун для обнаружения завершения в более чистом пути, чем альтернативные варианты, и это также полезно, чтобы убедиться, что тест будет перерыв, если вам попробуйте запустить его в тестовом бегуне, который не поддерживает тесты async.

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

+0

Спасибо, только что мне нужно! – ohyeah

Смежные вопросы