Я использую xUnit и FluentAssertions для написания модульных тестов, и я застрял в следующей проблеме. Поскольку я еще не реализовал catch
(в GetCountriesAsync
) WebException
, я бросаю новый NotImplementedException
в этом месте.Поиск лучшей реализации этого модульного теста
Этот код является единственным способом, которым я сделал тест, фактически работает должным образом. Я добавил собственную реализацию xUnit, поскольку FluentAssertions - это просто синтаксический сахар.
[Fact]
public async Task GetCountriesAsyncThrowsExceptionWithoutInternetConnection()
{
// Arrange
Helpers.Disconnect(); // simulates network disconnect
var provider = new CountryProvider();
try
{
// Act
var countries = await provider.GetCountriesAsync();
}
catch (Exception e)
{
// Assert FluentAssertions
e.Should().BeOfType<NotImplementedException>();
// Assert XUnit
Assert.IsType<NotImplementedException>(e);
}
}
Хотя я нашел эту реализацию намного приятнее, она просто не работает.
[Fact]
public async Task GetCountriesAsyncThrowsExceptionWithoutInternetConnection3()
{
// Arrange
Helpers.Disconnect(); // simulates network disconnect
var provider = new CountryProvider();
// Act/Assert FluentAssertions
provider.Invoking(async p => await p.GetCountriesAsync())
.ShouldThrow<NotImplementedException>();
// Act/Assert XUnit
Assert.Throws<NotImplementedException>(async() => await provider.GetCountriesAsync());
}
Как VS2012/ReSharper уже предлагает удалить избыточное async
ключевое слово методы испытаний, я заменил async Task
с void
и тестом по-прежнему ведет себя то же, так что я подозреваю, что асинхр Action
s не может быть ожидал, они довольно уволены и забыты.
Есть ли способ реализовать это правильно с помощью xUnit/FluentAssertions? Я думаю, что мне нужно пойти с моей первой реализацией, поскольку я не вижу никакой функциональности, такой как InvokingAsync()
.
Возможный дубликат [Как обрабатывать исключения, заданные задачами в Asset.Unit .net.Throws?] (Http://stackoverflow.com/questions/14084923/how-to-handle-exceptions-thrown-by-tasks -in-xunit-nets-assert-throwst) –
Очень приятно, именно то, что я искал. Благодаря! –