我最近嘗試在編寫新的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