gpt4 book ai didi

c# - NUnit 确实需要 "magic strings"而 MSTest 不需要吗?

转载 作者:太空狗 更新时间:2023-10-30 00:56:56 27 4
gpt4 key购买 nike

我正在尝试确定一个单元测试框架。我刚刚在读this comparison between NUnit and MSTest ,并且在“我们的第三个测试 – NUnit”下的示例中,魔术字符串用于引用属性名称,而 MSTest 版本则没有。

这是 MSTest 版本:

Assert.IsNotNull(b.Players.Where(x => x.Name.Equals("Cross")));
Assert.IsNotNull(b.Players.Where(x => x.Name.Equals("Nought")));

这是 NUnit 版本:

Assert.That(b.Players, Has.Some.With.Property("Name").EqualTo("Nought"));
Assert.That(b.Players, Has.Some.With.Property("Name").EqualTo("Cross"));

作者 (bearbonescoder) 声称 NUnit 版本更好,因为它的流畅风格更具可读性,而一些评论者不同意,因为 NUnit 需要属性名称的“魔术字符串”。作者似乎没有回应这种批评,但对我来说,这似乎是 NUnit 在重构方面的一个相当严重的劣势。

(顺便说一句,我喜欢 LINQ,所以我不觉得 MSTest 语句很难理解。顺便说一句,我相信作者在他的示例中使用的 LINQ 查询是不正确的——a Where 导致没有记录的表达式将返回一个空的 IEnumerable<T> 而不是 null 。)

无论如何,我的问题:

  1. NUnit 是否确实需要如上例中的“魔术字符串”,或者是否有一种不同且相当有效的方法来编写相同的断言而无需魔术字符串? (注意:我指的只是“名字”,而不是“Naught”和“Cross”。)

  2. 我应该关心吗?

最佳答案

最后唯一重要的是你所做的断言是否有效。在 NUnit 和 MSTest 中,有多种检查方法。您不必使用流畅的语法,您可以像这样编写相同的断言,例如:

Assert.True(b.Players.Any(p => p.Name == "Cross");

就个人而言,我更喜欢简单(r)检查的流畅语法,例如

Assert.That(b.Name, Is.EqualTo("Stan"));

Assert.That(b.Players, Is.Not.Null);

最后,您应该使用您认为更具可读性的任何内容,而不是为特定测试框架的实现细节而烦恼。我知道这确实不能回答您的问题,但我相信这不应该成为问题,因为可以以不止一种方式做事。

(作为旁注,我更喜欢 NUnit,因为语法流畅,还有 Assert.Throws 及其相反的 Assert.DoesNotThrow,以及方便的CollectionAssertStringAssert 等断言类,MSTest 中均不存在。

关于c# - NUnit 确实需要 "magic strings"而 MSTest 不需要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378065/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com