使用 Fluentassertions 和 Nunit 在单元测试中进行计数验证

Posted

技术标签:

【中文标题】使用 Fluentassertions 和 Nunit 在单元测试中进行计数验证【英文标题】:Count verifications in unit test using Fluent Assertions and Nunit 【发布时间】:2018-07-30 04:39:57 【问题描述】:

我正在寻找一种可靠的方法来跟踪单元测试中的断言数量,以便在自动化中进行报告。我知道使用 Nunit 可以跟踪使用TestContext.CurrentContext.AssertCount 进行测试的断言。问题是我的团队有我们自己的一组使用流利断言的断言方法,并且正在寻找一种方法来在任何时候增加该值。下面是我们的一个单元测试的精简版,以便您了解它们的阅读方式。

    [Test]
    public void ServiceHistoryButton_Asset(Dictionary<string, string> data)
    
        Threaded<Session>.CurrentBlock<HomePage>()
            ...
            .VerifyThat(form => form.Containerservice.Should().Contain(data["Containerservice"]))
            .VerifyThat(form => form.Account.IsDisplayed().Should().BeTrue())
            .VerifyThat(form => form.ContainerGroup.IsDisplayed().Should().BeTrue())
            .StoreValue<AssetServiceHistoryEdit, DateTime>(form => form.Service.First().ServiceDate, out DateTime firstDate)
            .VerifyThat(form => form.Service.ElementAt(2).ServiceDate.Should().BeBefore(firstDate))
    

我稍微研究了 NUnit 框架,如果我没看错的话,看起来他们正在扩展 Assert.That 方法并添加一个增量器来跟踪它何时被调用。我想过做类似的事情,但看起来我不能在测试本身之外访问TestContext,也不能访问设置或拆卸方法。如果我没有清楚地解释自己或者我是否可以提供更多信息,请告诉我。谢谢。

【问题讨论】:

VerifyThat 是做什么的?如果它调用Assert.That 或任何其他断言,则会发生计数的增量。 【参考方案1】:

不幸的是,没有真正的钩子或扩展点可供您使用。所有断言都通过 current AssertionScope。您可以将所有调用包装在another scope 中,但您无法提供IAssertionStrategy 的替代实现。不过,您可以向我提供 PR 以使之成为可能。

【讨论】:

以上是关于使用 Fluentassertions 和 Nunit 在单元测试中进行计数验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 FluentAssertions 和 NSubstitute 的异步单元测试是不确定的

使用 Fluentassertions 和 Nunit 在单元测试中进行计数验证

FluentAssertions Throw() 未列出使用

如何在 FluentAssertions 中使用 Excluding 来排除 Dictionary 中的特定 KeyValue 对

使用 FluentAssertions API 4.x 语法迁移 xunit 项目以使用 FluentAssertions v5.x 版本运行

如何使用 FluentAssertions 检查对象是不是从另一个类继承?