是否有理由不在NUnit中使用AssertionHelper?

时间:2011-12-14 20:27:09

标签: unit-testing nunit

我已经使用NUnit一段时间了,我一直在从AssertionHelper派生我的测试类。通过这样做,我的测试使用如下语法:

Expect(myValue, Is.EqualTo(3), "value wasn't equal to 3");

而不是:

Assert.That(myValue, Is.EqualTo(3), "value wasn't equal to 3");

我看到几乎所有使用NUnit的示例都使用Assert.That()语法,但似乎Expect()更有意义(至少对我而言),因为我期待代码中的某种行为。

AssertionHelper与NUnit一起使用是否有任何不足之处,或者它真的归结为品味/风格问题?

提前致谢!

4 个答案:

答案 0 :(得分:5)

两者都做同样的事情,并且两者都允许您指定实现IConstraint接口的自定义约束。从我的角度来看Assert()有点轻量级,因为不会强制你继承特殊类中的所有测试装置。

答案 1 :(得分:1)

AssertionHelper的主要问题是很少有人使用它,因此新的NUnit功能和约束往往不会被添加到它。因为它被忽略而没有被广泛使用,NUnit team is considering removing it或将其作为一个单独的包。

该小组正在寻求社群对是否删除它的反馈,因此请随时对此问题发表评论。

答案 2 :(得分:0)

由于我命名变量的方式,我的测试通常以行结束:

Assert.That(actual, Is.EqualTo(expected));

哪个IMO比

读得更好(更流利)
Expect(actual, Is.EqualTo(expected));

答案 3 :(得分:0)

Rob Prouse说NUnit团队正在弃用AssertionHelper是正确的。当我发现它在更新中被淘汰时,我已经使用了大约8个月,我提出维护它。关于这个问题的讨论进展得很慢,我有点不耐烦了,所以我在Nuget上编写了NUnit.StaticExpect并提供了AssertionHelper的替代品,并在代码中使用了“using static”import。我把一个生产项目改为它,它运作良好。

我也是在不同的路径上开始的:NExpect它提供的语法更容易让人想起Chai,但其可扩展性更像Jasmine。 NExpect处于一个非常有用的状态 - 我已经在我自己的项目中使用了一段时间了。有一个demo project,您可以通过以下方式观察断言的演变:

  1. 断言。{具体方法}(例如Assert.AreEqual)
  2. Assert.That({value or lambda},{current-tense constraint})
  3. AssertionHelper用法
  4. NUnit.StaticExpect用法
  5. NExpect用法
  6. 以及提供NExpect可扩展性的示例。希望这会有所帮助。