我最近尝试在编写新的NUnit测试时使用方法Assert.Equals()。一旦执行此方法将抛出AssertionException
,说明 Assert.Equals should not be used for Assertions.
乍一看这有点令人费解。这里发生了什么?NUnit的Assert.Equals抛出异常“Assert.Equals不应该用于断言”
110
A
回答
164
Assert
是继承自System.Object的静态类,因为所有类都隐式地在c#中执行。 System.Object的实现了以下方法:
static bool Equals(object a, object b)
其意图是否相等的比较上断言的方法是本Assert.AreEqual()
方法。因此,在单元测试中通过Assert类调用Object.Equals()
方法肯定是一个错误。为了防止这种错误并避免混淆,NUnit的开发人员有意将Assert类中的Object.Equals
隐藏在引发异常的实现中。下面是执行:
/// <summary>
/// The Equals method throws an AssertionException. This is done
/// to make sure there is no mistake by calling this function.
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
[EditorBrowsable(EditorBrowsableState.Never)]
public static new bool Equals(object a, object b)
{
// TODO: This should probably be InvalidOperationException
throw new AssertionException("Assert.Equals should not be used for Assertions");
}
当然除了消息本身是混乱的,但至少它可以让你知道你做了什么错误。
3
tldr;
Assert.AreEqual(a, b); // <-- Compares a, b
不是:
Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself
相关问题
- 1. NUnit Assert.Equals我错过了什么?
- 2. NUnit + Moq抛出异常
- 3. 断言从NUnit异常到MS测试
- 4. MATLAB中断抛出异常
- 5. 抛出异常时中断
- 6. 如何让STL抛出异常而不是断言?
- 7. 调试器不断抛出异常?
- 8. 什么时候应该抛出异常?
- 9. PHPUnit抛出异常,当应该没有
- 10. 应该记录代码抛出异常?
- 11. 断言一个特定的异常在黄瓜抛出
- 12. NUnit与Rhino Mocks异常:为什么抛出此异常?
- 13. NUnit约束不会抛出特定异常的代理
- 14. NUnit的异步测试例外断言
- 15. 如何在Android中测试断言抛出异常
- 16. CppUnit预计异常与断言抛出警告编译C4127
- 17. 魔术异常抛出抛出异常
- 18. Qunit断言抛出不起作用
- 19. 如果存在不应该出现的元素,我该如何抛出异常
- 20. 不会抛出的异常
- 21. 应该抛出异常并处理,如果它不能发生?
- 22. 休眠是*不*抛出异常(我认为应该)
- 23. XML Deserilzation为什么不在应该抛出异常
- 24. EF4抛出NotSupported异常时,它(IMHO)不应该
- 25. 抛出异常的Web应用
- 26. System.out.println()不抛出异常,但System.in.read()抛出异常,为什么?
- 27. 异常抛出WCF而不抛出异常
- 28. 异常抛出异常
- 29. wxPython不应该抛出异常,而应该提供原始错误消息
- 30. 抛出异常
你能不能给我们一些环境中,例如特定的代码,这是在?你比较什么类型的对象等? – 2012-07-20 17:50:59
对不起,但我已经找到了答案。我只是问了它,所以我可以为后代发表答案。上下文并不重要,你会通过阅读答案来看到。我希望这个答案很容易通过网络搜索发现异常信息。 – Odrade 2012-07-20 17:55:59
+1为诚实! – stannius 2012-11-01 22:38:31