Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (何时)使用FluentAssertions是个好主意吗?_C#_.net_Unit Testing_Xunit_Fluent Assertions - Fatal编程技术网

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

C# (何时)使用FluentAssertions是个好主意吗?,c#,.net,unit-testing,xunit,fluent-assertions,C#,.net,Unit Testing,Xunit,Fluent Assertions,我正在重写一个C#NET项目,目前正在计划如何进行测试 阅读完所有内容后,我将安装XUnit框架(这是第一次——我对MSTest更有经验)。现在我想知道是否应该将它与FluentAssertions(我以前也从未使用过)结合起来,或者编写纯XUnit测试 乍一看,FluentAssertions听起来既乏味又时尚,但我不确定它是否真的能让我写出可读性最好的代码,以及它在复杂测试中的扩展能力 因此,我在寻找你的经验和论点。[何时](是否会)使用FluentAssertions?我很好奇 Fluen

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

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

乍一看,FluentAssertions听起来既乏味又时尚,但我不确定它是否真的能让我写出可读性最好的代码,以及它在复杂测试中的扩展能力

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

Fluent断言是我一直在使用的Nuget包 我的项目大约有6年了。这是非常简单的拿起和取出 开始使用。大多数人都能在5-10分钟内解决这个问题 这将使阅读单元测试变得更容易。流畅的 断言是免费的,所以尝试它真的没有政党犯规 出来我想我已经向10多个团队介绍了流畅的断言 到目前为止还没有人抱怨。大多数团队 不要使用它只是因为没有接触到它。使用标准方法 单元测试可能与此类似:

这个测试没有问题,但你需要花一秒钟或更长的时间 两个人去了解发生了什么。相反,使用FLuent Assertations 您可以这样编写相同的测试:

希望您能看到第二个示例花费的时间更少 阅读,因为它读起来像一个句子,而不是一个断言语句。 基本上,这都是流畅的断言,是一些扩展 方法,与Assert相比更易于读取单元测试 声明。我希望你能理解为什么它这么容易学。 你所需要做的就是在一个结果中得到你的测试结果 变量,使用Should()函数,然后使用Fluent断言 为您的用例测试的其他扩展。简单


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

但如果我能流利地写作

c.Should().beequivalento(预期对象)


这比一系列的
Assert.AreEqual()
更容易阅读,更重要的是,编写速度也更快。

而且它与测试框架无关。因此,如果您决定从xUnit切换到其他东西,就不必再重写断言代码。只是说……但是代码/数据分离原则是什么呢?
[TestMethod]  
public void Example_test()  
{  
    var result = PerformLogic();
    var expected = true;  
    Assert.AreEqual(expected, actual);  
}  
[TestMethod]  
public void Example_test()  
{  
    var result = PerformLogic();
    result.Should().BeTrue();  
}