使用 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 版本运行