我正在尝试检查异步方法抛出的具体异常。
为此,我使用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/

10-09 22:30