c# – FluentAssertions无法识别异步方法/ Func的ShouldNotThrow

我试图检查异步方法抛出具体异常.

为此我使用MSTEST和FluentAssertions 2.0.1.

我已经检查了这个Discussion on Codeplex,并看到它与异步异常方法的工作原理另一个关于FluentAssertions async tests链接

经过一段时间尝试使用我的“生产”代码,我已经关闭了Fluentassertions假的aync类,我的结果代码就像这样(把这个代码放在一个[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 method is not recognised by the code. If I try to
compile,it gives me this error:
‘System.Func’ does not contain a
deFinition for ‘ShouldNotthrow’ and the best extension method overload
‘FluentAssertions.AssertionExtensions.ShouldNotthrow(System.Action,
string,params object[])’ has some invalid arguments

谢谢.

2.0.1 FA版本不支持这个ShouldNotthrow功能,它将被包含在下一个reléase2.1(接近下周).

注意:在2.0.1versión中已经支持ShouldThrow.

解决方法

你不需要包罗万象的行动.这仅用于单元测试来验证API是否抛出正确的异常.这应该是足够的
[TestMethod]
public void TestThrowFromAsyncmethod()
{
    Func<Task> asyncFunction = async () =>
    {
        await asyncObject.ThrowAsync<ArgumentException>();
    };

    asyncFunction.ShouldNotthrow();
}

不幸的是,.NET 4.5中缺少Func上的ShoudlNotthrow().我已经在版本2.1(目前dogfooding)中修复了这一点.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...