(何时)使用 FluentAssertions 是个好主意吗? [关闭]

Posted

技术标签:

【中文标题】(何时)使用 FluentAssertions 是个好主意吗? [关闭]【英文标题】:(When) would it be a good idea to use FluentAssertions? [closed] 【发布时间】:2019-08-24 23:24:00 【问题描述】:

我正在重写一个C# .NET 项目,目前正在计划如何进行测试。

在阅读完所有内容后,我将安装 XUnit 框架(这是第一次——我对 MSTest 更有经验)。现在我想知道是否应该将它与 FluentAssertions (我以前也从未使用过)结合使用,或者编写纯 XUnit 测试。

乍一看,FluentAssertions 听起来既呆板又时髦,但我不确定它是否真的会引导我编写可读性最好的代码,以及它在复杂测试中的扩展能力如何。

因此,我正在寻找您的经验和论点。 [什么时候](做|会)你使用 FluentAssertions?我很好奇。

【问题讨论】:

【参考方案1】:

Fluent 主要是为了可读性和便利性。 如果您要编写多个单元测试,我建议您使用它。 我最近遇到了将对象“a”和“b”映射到对象“c”的情况,我想通过单元测试来验证映射器。 因此,我创建了一个“expectedObject”,其中包含对象“c”在映射后应包含的所有属性。 由于我没有编写比较器,也不需要比较器,因此将对象“c”与“expectedObject”进行比较以断言它们包含相同的数据会非常麻烦。有问题的对象包含许多属性,而这些属性又具有许多属性。

但使用 Fluent 我可以简单地编写

c.Should().BeEquivalentTo(expectedObject);

这比一连串的Assert.AreEqual() 更容易阅读,在这种情况下,更重要的是,它的编写速度也更快。

【讨论】:

【参考方案2】:

Fluent Assertions 是我一直在使用的 Nuget 包 我的项目大约 6 年。取货非常简单 开始使用。大多数人可以在 5-10 分钟内掌握它 它会让阅读你的单元测试更容易一些。流利 Assertions 是免费的,因此尝试它确实不会造成派对犯规 出去。我想我已经向 10 多个团队介绍了 Fluent Assertions 到目前为止,没有人抱怨。大多数团队的最大原因 不使用它只是缺乏接触它。使用标准方法 单元测试可能类似于:

[TestMethod]  
public void Example_test()  
  
    var actual = PerformLogic();
    var expected = true;  
    Assert.AreEqual(expected, actual);  
  

这个测试没有问题,但你需要花一秒钟或 二要明白是怎么回事。相反,使用流利的断言 您可以像这样编写相同的测试:

[TestMethod]  
public void Example_test()  
  
    var result = PerformLogic();
    result.Should().BeTrue();  
  

希望您可以看到第二个示例花费的时间要少得多 阅读,因为它读起来像一个句子,而不是一个断言语句。 从根本上说,这就是 Fluent Assertions 的全部,一些扩展 与 Assert 相比,使单元测试更容易阅读的方法 陈述。我希望你能理解为什么它这么容易上手。 您需要做的就是在结果中获得测试结果 变量,使用 Should() 使用,然后使用 Fluent Assertions 其他扩展来测试您的用例。简单!

http://www.jondjones.com/c-sharp-bootcamp/tdd/fluent-assertions/what-is-fluent-assertions-and-should-i-be-using-it

【讨论】:

它与测试框架无关。因此,如果您决定从 xUnit 切换到其他东西,则不必再重写您的断言代码。只是说... 但是代码/数据分离原理是什么? ?

以上是关于(何时)使用 FluentAssertions 是个好主意吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 FluentAssertions 4.x 版断言异常?

FluentAssertions Throw() 未列出使用

如何使用 FluentAssertions 在 XUnit 中测试 MediatR 处理程序

FluentAssertions 没有例外? [复制]

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