FluentAssertions Throw() 未列出使用

Posted

技术标签:

【中文标题】FluentAssertions Throw() 未列出使用【英文标题】:FluentAssertions Throw() not listed to use 【发布时间】:2019-04-11 09:56:14 【问题描述】:

我正在将 FluentAssertions 与 NUnit 一起使用,并且我意识到 Throw() 方法和其他相关方法并未列出供我使用。我是否必须安装任何其他软件包才能访问此方法?

我正在使用由 NuGet 安装的最新版本 5.4.2。

【问题讨论】:

你的意思是Should().Throw()还是Assert.Throws() 应该().Throw() 【参考方案1】:

文档并没有说得很清楚,但Should().Throw() 必须应用于Action(或者,正如@ArturKrajewski 在下面的评论中指出的那样,@987654323 @ 和 async 调用):

Action test = () => throw new InvalidOperationException();
test.Should().Throw<InvalidOperationException>();

所以测试可能如下所示:

public class AssertThrows_ExampleTests 
    [Test]
    public void Should_Throw_Action() 
        var classToTest = new TestClass();

        // Action for sync call
        Action action = () => classToTest.MethodToTest();
        action.Should().Throw<InvalidOperationException>();
    

    [Test]
    public void Should_Throw_Action_Async() 
        var classToTest = new TestClass();

        // Func<Task> required here for async call
        Func<Task> func = async () => await classToTest.MethodToTestAsync();
        func.Should().Throw<InvalidOperationException>();
    

    private class TestClass 
        public void MethodToTest() 
            throw new InvalidOperationException();
        

        public async Task MethodToTestAsync() 
            throw new InvalidOperationException();
        
    

【讨论】:

从 5.5.0 开始,Func&lt;T&gt; 也支持Should().Throw() 和类似的断言。此外,还支持 Func&lt;Task&gt;Func&lt;Task&lt;T&gt;&gt; 的异步方案。

以上是关于FluentAssertions Throw() 未列出使用的主要内容,如果未能解决你的问题,请参考以下文章

FluentAssertions:排序列表的等价性

提供 FluentAssertions 的扩展

FluentAssertions 是不是支持字典的 WithStrictOrdering?

FluentAssertions 不应该包含失败

Fluentassertions.ShouldBeEquivalentTo 中的 Ignoredatamember

FluentAssertions:int.Should().Equals 返回错误的结果?