我正在重写一个C#.NET项目,目前正在计划我将如何进行测试。
在我阅读完所有内容后,我将安装XUnit框架(这是第一次 - 我对MSTest更有经验)。现在我想知道我是否应该将它与FluentAssertions(我之前从未使用过)相结合,或者更确切地说是编写纯XUnit测试。
乍一看,FluentAssertions听起来很讨厌和时尚,但我不确定它是否真的会引导我编写最佳可读代码以及它在复杂测试中的扩展程度。
因此,我正在寻找你的经验和论点。 [when](do |会)你使用FluentAssertions吗?我很好奇。
流利主要是关于可读性和便利性。 如果您打算写一些以上的单元测试,我建议使用它。我最近遇到的情况是我将对象'a'和'b'映射到对象'c'上,我想用单元测试验证映射器。 所以,我创建了一个'expectedObject',它包含了对象'c'在映射后应该包含的所有属性。 由于我没有编写比较器,也没有需要一个比较器,将对象'c'与'expectedObject'进行比较以断言它们包含相同的数据会非常麻烦。有问题的对象包含许多属性,而这些属性又具有许多属性。
但是对于Fluent,我可以简单地写一下
c.Should().BeEquivalentTo(expectedObject);
这比一连串的Assert.AreEqual()
更容易阅读,在这种情况下,更重要的是,写入也要快得多。
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 Assertations,您可以像这样编写相同的测试:
[TestMethod]
public void Example_test()
{
var result = PerformLogic();
result.Should().BeTrue();
}
希望你可以看到第二个例子花了很多时间阅读,因为它读起来像一个句子而不是一个Assert语句。从根本上说,这是所有Fluent Assertions都是一些扩展方法,与Assert语句相比,它可以更容易地读取单元测试。我希望你能理解为什么这么容易接受。您需要做的就是在结果变量中获得测试结果,使用Should()用法,然后使用Fluent Assertions其他扩展来测试您的用例。简单!