async void
модульные тесты нельзя запускать в Visual Studio 2012:
[TestClass]
public class MyTestClass
{
[TestMethod]
public async void InvisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
}
Если я хочу иметь асинхронный модульный тест, метод теста должен возвращать Task:
[TestMethod]
public async Task VisibleMyTestMethod()
{
await Task.Delay(1000);
Assert.IsTrue(true);
}
Почему это так? Не то чтобы мне абсолютно необходим async void
метод тестирования, мне просто любопытно. Visual Studio 2012 не выдает ни предупреждений, ни ошибок при создании async void
метода тестирования, даже если он не может быть запущен ...
async void
тесты, и в этой ссылке в некоторой степени подробно описано, как и почему это нужно поддерживать . См. Ответ ниже.Просто потому, что MSTest не поддерживает
async void
модульные тесты. Это можно сделать, введя контекст, в котором они могут выполняться.MSTest не поддерживает это, вероятно, потому, что Microsoft решила, что это слишком много изменений для существующих тестов (возможно, существующие тесты зашли бы в тупик, если бы им дали неожиданный контекст).
Предупреждения / ошибки компилятора нет, потому что это совершенно правильный код C #. Единственная причина, по которой это не работает, - это структура модульного тестирования (т. Е. Я считаю, что xUnit поддерживает
async void
тесты), и для компилятора C # было бы грубым нарушением разделения задач, если бы он посмотрел на ваши атрибуты и определил вас. используете MSTest и решили, что вы действительно не хотите его использоватьasync void
.источник
В VS2015 я обнаружил, что любые методы тестирования, оформленные с помощью async, не отображаются в обозревателе тестов. В итоге я удалил ключевое слово async и заменил вызов await в тесте на task.Wait () и выполнил свои утверждения для task.Result.
Кажется, работает нормально. Еще не пробовал с тестированием исключений.
var task = TheMethodIWantToTestAsync(someValue); task.Wait(); var response = task.Result; Assert.IsNotNull(response); Assert.IsTrue(response.somevalue);
источник