1

我有一個由多個類實現的算法,全部由單元測試覆蓋。處理單元測試和集成測試之間的重複問題

我想重構它,它會改變兩個類的行爲。 當我更改一個類及其測試時,所有單元測試都會通過,但算法在重構完成之前變得不正確。

這個例子說明單元測試的完整覆蓋有時是不夠的,我需要整個算法在輸入輸出方面的「集成」測試。理想情況下,這些測試應該完全覆蓋我的算法的行爲。

我的問題:看起來像通過添加這樣的集成測試,我使單元測試不必要和多餘。我不想支持重複的測試邏輯。我應該刪除我的單元測試還是保持原樣更容易找到錯誤位置?

回答

1

這是測試問題的一部分,測試過細,與實施緊密結合。

就我個人而言,我會寫測試,重點放在算法的行爲,並會考慮這個'一個單位'。它被分成幾個類的事實是一個實現細節,就像將公共方法的功能分解成幾個較小的私有方法一樣,也是一個實現細節。我不會爲私有方法單獨編寫測試,它們將通過公共方法的功能測試進行測試。

如果這些類中的一些通常是有用的,並且會在其他地方重用,那麼我會考慮爲它們編寫單元測試,因爲那時它們會自行定義一些行爲。

這會導致一些重複,但這是好的,因爲這些類現在有一個公開合約來支持(哪些組件使用它),這些測試可以定義。

有意思的是,看單位的定義在this article