(何时)使用FluentAssertions是一个好主意?

时间:2019-04-03 12:18:40

标签: c# .net unit-testing xunit fluent-assertions

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

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

乍一看,FluentAssertions听起来很书呆子和时尚,但是我不确定它是否真的会导致我编写最佳可读的代码以及它在复杂测试中的扩展程度。

因此,我正在寻找您的经验和观点。 [何时](使用|将使用)FluentAssertions?我很好奇。

2 个答案:

答案 0 :(得分:3)

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

但是有了Fluent,我可以简单地写

c.Should().BeEquivalentTo(expectedObject);

这比Assert.AreEqual()连读起来容易得多,在这种情况下,更重要的是,编写起来也快得多。

答案 1 :(得分:2)

  

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

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

此测试没有错,但是您需要花一秒钟或   二来了解发生了什么。而是使用FLuent断言   您可以像这样编写相同的测试:

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

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

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