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

Kno*_*eus 5 .net c# unit-testing xunit fluent-assertions

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

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

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

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

Air*_*cer 8

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

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

c.Should().BeEquivalentTo(expectedObject);

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


Joe*_*ips 5

Fluent Assertions 是一个 Nuget 包,我一直在我的项目中使用了大约 6 年。拿起并开始使用非常简单。大多数人可以在 5 到 10 分钟内掌握它,这将使阅读单元测试更容易一些。Fluent Assertions 是免费的,所以尝试它真的没有派对犯规。我想我现在已经将 Fluent Assertions 引入了 10 多个团队,到目前为止没有人抱怨。大多数团队不使用它的最大原因只是缺乏接触它。使用标准方法,单元测试可能类似于:

[TestMethod]  
public void Example_test()  
{  
    var actual = PerformLogic();
    var expected = true;  
    Assert.AreEqual(expected, actual);  
}  
Run Code Online (Sandbox Code Playgroud)

这个测试没有任何问题,但你需要花一两秒钟来了解发生了什么。相反,使用 Fluent 断言,您可以像这样编写相同的测试:

[TestMethod]  
public void Example_test()  
{  
    var result = PerformLogic();
    result.Should().BeTrue();  
}  
Run Code Online (Sandbox Code Playgroud)

希望您能看到第二个示例花费更少的时间来阅读,因为它读起来更像是一个句子而不是 Assert 语句。从根本上说,这就是 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