我想了解更多關於JUnit和TDD,但我遇到了一些測試用例之間耦合的問題。減少測試用例之間的耦合
當我爲特定數據類型的API編寫測試用例時,說一個Deque<T>
,如何限制測試用例之間的耦合?舉例來說,如果我的方法insertFirst(T item)
編寫測試用例,它看起來非常簡單的假設,我應該能夠調用該方法正確初始化的對象之後,觸發兩件事情:
- 的
Deque
的大小對象應該增加一個 - 如果我隨後調用相應的
T removeFirst()
方法,它應該返回一個對初始調用插入的對象的引用。
但是,這至少會在我的兩個測試用例之間產生不希望的耦合,其中一個測試用例傳遞取決於另一個API方法的正確實現。例如,爲了通過這個測試用例,我需要一個正確的實現來檢查Deque
中的項目數量以及刪除項目。如果我對任何一種方法的測試出於任何原因都是不正確或不完整的,那麼我對insertFirst
方法的測試將自動受到懷疑。
避免這種情況的最佳做法是什麼?我以某種方式編寫測試用例是否錯誤?
我明白你在說什麼,但是這不會創建方法的循環依賴嗎?爲了測試插入,我必須使用remove,並且爲了測試remove,我使用insert?不知何故,這似乎是錯的。這可能是因爲我對這些想法沒有足夠的經驗,我很快就會因爲不舒服而變得舒適。感謝您的澄清。 – crlane 2013-02-20 13:59:08
@crlane:是的,它創建了某種循環依賴。這就是爲什麼即使只有一次測試失敗,你也無法說出你的課程*的任何事情。只有*全部*測試通過,你才知道一切都按預期工作。 – 2013-02-20 14:00:20
@crlane:請參閱具體示例的更新答案。 – 2013-02-20 14:12:32