VS11 Beta имеет первоклассную поддержку для методов тестирования, которые возвращают Task
.
Так что если вы измените свою подпись на:
public async static Task ExecuteNonQuery(string ConnStr, string Query)
, то вы можете проверить ее следующим образом:
using Target = KC.DataAccess.Global.SQL;
[TestMethod]
[TestCategory("Unit")]
[ExpectedException(typeof(ArgumentNullException))]
public async Task ExecuteNonQueryFail1()
{
await Target.ExecuteNonQuery(null, "select 1");
}
(у меня не было возможности самостоятельно опробовать эту новую поддержку, но я читал, что она должна работать).
Примечание: вы должны вернуть Task
в ваших async
методах, если вы не должны вернуть void
(например, для обработчика событий).Task
ожидаемо, поэтому код более пригоден для повторного использования.Я расскажу об этом в моем вступительном блоге "Async and Await" .
Если вам по какой-то причине нужно протестировать метод async void
, вам нужно предоставить свой SynchronizationContext
чтобы поймать любые исключения (см. раздел «Асинхронное модульное тестирование» недавнего сообщения Стивена Туба в блоге ).
У меня есть пара постов в блоге, посвященных асинхронному модульному тестированию ( часть 1 , часть 2 ).Я написал базовый проект Async Unit Tests для VS2010 + AsyncCTP или VS11-DevPreview, но у меня еще не было возможности протестировать его с VS11-Beta.Это был бы самый простой способ для юнит-тестирования async void
методов, если вам нужно. [CodePlex | NuGet]