單元測試用法
回答
你可以檢查你喜歡的任何東西。對於函數式語言來說,函數的返回值是唯一的指示器,你可能需要檢查全局狀態(使用高級語言)或對象狀態(使用面向對象的語言),以確定測試已通過。
作爲一個非常簡單的(而且通常沒有必要)例如:
void testSetTextSetsText()
{
Foo foo();
foo.setText("bar");
assertEqual("bar", foo.text());
}
你不能真正測試以另一種方式void
方法,其實。 技術上你在這裏再次檢查方法的返回值(text()
),但大多數時候你想編寫測試來驗證外部觀察者可見的狀態,所以這已經足夠了。
完美,謝謝! – willsam 2013-05-03 06:37:36
爲什麼「經常不需要」?是的,設置一個成員是微不足道的,但是在設計良好的代碼中,大多數事情都是基於其他瑣事構建的。但那意味着你只需要測試一些不重要的東西。大部分bug都隱藏在一些不正確的瑣事中(比如你的memleak和'.'而不是' - >'access)。所以這個測試*是必要的。也許不會檢查'setText'是否確實做了正確的事情,但要確保它不會被意外更改。 – 2013-05-03 06:43:49
我不再測試微不足道的getter和setter,代碼覆蓋率被詛咒。這是不支持更好構造的語言的樣板代碼(例如,與C#相比,Java和C++)。當設置者*確實*做了其他事情而不僅僅是設置該值時*我肯定*想要測試它(當合同說「設置模型時也會創建新的選擇模型」)。但只是爲了將一個論點傳播到一個領域?我真的不再需要這種需要了。 – Joey 2013-05-03 06:47:16
您(可以)不僅檢查值,還檢查行爲。例如,使用Mock-object拋出預期異常或致電外部服務。
void testMethodThrows()
{
Foo f;
AssertThrows([&](){f.bar();});
}
void testSendsEmail
{
Foo f;
EmailServiceMock email;
f.bar(email);
Assert(email.EmailWasSent());
}
啊,的確,我忘了那些。帶回需要在JUnit 3中測試異常的不好記憶;-) – Joey 2013-05-03 06:50:24
- 1. PySpark單元測試方法
- 2. python單元測試方法
- 3. 單元測試NSURLConnectionDelegate方法
- 4. 單元測試UI方法
- 5. 單元測試模擬法
- 6. 單元測試Java方法
- 7. 單元測試WCF方法
- 8. 單元測試測試
- 9. CakePHP測試 - 單元測試
- 10. 使用HttpContext的單元測試方法
- 11. 單元測試實用程序方法
- 12. Django/Python單元測試side_effect用法
- 13. 單元測試專用方法
- 14. 無法使用單元測試
- 15. 無法單元測試使用$窗口
- 16. 調用FileWriter的單元測試方法
- 17. 單元測試通用方法
- 18. 單元測試無法正常工作 - Ruby使用測試單元
- 19. 你用單元測試測試什麼?
- 20. 單元測試
- 21. 單元測試
- 22. 單元測試
- 23. 單元測試
- 24. 單元測試
- 25. 單元測試
- 26. 單元測試
- 27. 單元測試
- 28. 單元測試
- 29. 單元測試
- 30. 單元測試
你檢查什麼你可以 – 2013-05-03 06:33:57