我正在尝试检查异步方法抛出的具体异常。
为此,我使用mstest和fluentassertions 2.0.1。
我已经检查过这个Discussion on Codeplex并查看它如何与异步异常方法一起工作这是另一个关于FluentAssertions async tests的链接:
在尝试使用“production”代码一段时间后,我关闭了fluentassertions伪aync类,得到的代码是这样的(将此代码放入a[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
功能,它将包含在下一个reléase 2.1中(下周)。注意:2.0.1版本中已支持shouldthrow。
最佳答案
你不需要包罗万象的行动。这只在单元测试中用于验证api是否抛出了正确的异常。这就足够了:
[TestMethod]
public void TestThrowFromAsyncMethod()
{
Func<Task> asyncFunction = async () =>
{
await asyncObject.ThrowAsync<ArgumentException>();
};
asyncFunction.ShouldNotThrow();
}
不幸的是.NET 4.5中缺少func上的shoudlNotThrow()。我已经在2.1版中修复了这个问题(目前是dogfooding)。
关于c# - 异步方法/Func无法识别FluentAssertions ShouldNotThrow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18240275/