#c# #xunit
#c# #xunit
Вопрос:
Я новичок в Xunit. Я создаю новое исключение в своем коде :
throw new NotImplementedException("Missing UPC. File is corrupt");
в моем тестовом файле я написал:
[Fact]
public void ParserRow_Throws_Exception_For_Null_UPC()
{
var record = GetRessoRecord();
record.UPC = "";
RevenueReportItem result = Sut.ParseRow(record);
Assert.Throws<NotImplementedException>(() => Sut.ParseRow(record));
}
Сообщение об ошибке в проводнике тестов гласит
Система.Исключение NotImplementedException : отсутствует UPC. Файл поврежден
Как мне добавить возвращенную цитату?
Комментарии:
1. вы вызываете проверенный метод дважды. удалите первый вызов, который находится за пределами assert, так как он вызовет исключение и остановит выполнение теста.
2. спасибо @CeeMcSharpface. жаль, что вы не ответили на это в отдельном ответе, чтобы я мог показать, что это решило проблему!
Ответ №1:
- Синхронный вариант
Throws<>
теперь устарел. - Вы вызываете проверенный метод дважды. Удалите первый вызов, который находится за пределами assert, так как он вызовет исключение и остановит выполнение теста.
- Вызов
Throws<>
возвращает объект исключения, из которого вы можете извлечь и проверить сообщение, например:
[Fact]
public async Task ParserRow_Throws_Exception_For_Null_UPC()
{
var exceptionDetails = await Assert.ThrowsAsync<NotImplementedException>(() => {
throw new NotImplementedException("foo");
});
Assert.Equal("foo", exceptionDetails.Message);
}
Комментарии:
1. когда модульный тест выполняется, он попадает в место, где генерируется исключение, и код останавливается. есть какой-нибудь способ обойти это?
2. Я думаю, что в вашем заявлении отсутствует одна важная часть. Throws считается устаревшим для асинхронного кода (Func<Task<T>> ), а не для кода синхронизации!!!
3. пустое решение, новый проект xunit с последней версией .net core и последним пакетом xunit, начиная с неасинхронного факта, утверждает, что compile как и ожидалось, просто только Throws<> не будет компилироваться с информацией о том, что он устарел. это даже ошибка компилятора, а не предупреждение. Я тоже нашел это очень странным, когда понял это во время ответа.
4. @CeeMcSharpface: Я не могу воспроизвести это. См . gist.github.com/jskeet/5bf5776c84ed2becae1c931626871992 , который компилируется без проблем как для xUnit 2.4.1, так и для 2.4.2-pre12.