Я пытаюсь проверить метод async, создавая конкретное исключение.
Для этого я использую MSTEST и FluentAssertions 2.0.1.
Я проверил этот Обсуждение на Codeplex и посмотрел, как он работает с асинхронными исключениями, эта другая ссылка о Тесты асинхронного тестирования FluentAssertions:
По прошествии некоторого времени, пытаясь работать с моим "производственным" кодом, я переключился на поддельный класс aync Fluentassertions, и полученный в результате код выглядит так (поместите этот код внутри [TestClass]
:
[TestMethod]
public void TestThrowFromAsyncMethod()
{
var asyncObject = new AsyncClass();
Action action = () =>
{
Func<Task> asyncFunction = async () =>
{
await asyncObject.ThrowAsync<ArgumentException>();
};
asyncFunction.ShouldNotThrow();
};
}
internal class AsyncClass
{
public async Task ThrowAsync<TException>()
where TException : Exception, new()
{
await Task.Factory.StartNew(() =>
{
throw new TException();
});
}
public async Task SucceedAsync()
{
await Task.FromResult(0);
}
}
Проблема заключается в том, что ShouldNotThrow
недействителен:
Метод ShouldNotThrow не распознается кодом. Если я попытаюсь компиляция, это дает мне эту ошибку: "System.Func" не содержит определение "ShouldNotThrow" и лучшая перегрузка метода расширения "FluentAssertions.AssertionExtensions.ShouldNotThrow(System.Action, string, params object []) 'имеет некоторые недопустимые аргументы
Спасибо.
РЕШЕНИЕ
2.0.1 Версия FA не поддерживает эту функциональность ShouldNotThrow
, и она будет включена в следующий релиз 2.1 (около следующей недели).
Примечание. ShouldThrow уже поддерживается в версии 2.0.1.