那麼,我有一個使用另一種方法的方法。我有次要方法的測試,現在我想爲主要方法編寫單元測試。如何使用包含其他方法的方法編寫單元測試?
我認爲我必須在沒有看到要測試的方法的代碼的情況下編寫測試,我的意思是,我沒有在實現中考慮測試,因此在測試主要方法I必須測試次要方法的功能和主要方法的功能。
例如,我有兩個汽車車庫。在加拉加有一輛汽車和我擁有的汽車數量。所以我想能夠添加一輛新車到加拉加,取下汽車並將車從車庫轉移到另一輛車。所以我有這種方法:
- 一種方法將車添加到車庫,必須與汽車相關的加拉加和udpdate汽車的數量。這是我有一輛新車的時候。
- 一種從車庫中取出汽車的方法,與車庫無關並更新汽車數量。這是當我沒有車了,例如,因爲我賣了它。
- 關於轉移車輛的方法,即將車輛從第一個車庫中取出並將車輛添加到新車庫。所以這個方法調用add方法和remove方法。
的傳輸方法的代碼是類似的東西:
public void transferCar(garage1, garage2, car)
{
removeCar(garage1, car);
addCar(garage2, car);
}
如果我測試removeCar和addCar,我相信他們的工作預期,測試轉移,我一定要考所有addCar的情況以及removeCar的所有情況?因爲如果我不知道transferCar的實現,我不知道此方法是否使用removeCar和addCar,因此我不知道該方法是否按預期工作。
換句話說,當我測試transferCar時,測試必須覆蓋removeCar的代碼的100%,addCar的代碼的100%和transferCar方法的代碼的100%,或者確保我調用該方法removeCar一次和addCar在transferCar和它的預期是否足夠,雖然removecar和addCar不被覆蓋100%?
因爲如果我必須測試removeCar和addCar的所有情況,我會做兩次相同的測試。所以我重構了代碼,因爲removeCar和addCar我在很多地方使用它,但在我的測試代碼中,我多次使用相同的測試。
這是一個非常單一的例子,但是如果我有一個方法使用很少的方法,而這個其他方法使用antohers,並且主方法應該覆蓋所有方法的所有代碼,那將是一個非常長的測試,和很多工作。
總的來說,當我測試一個方法時,我已經覆蓋了此方法的代碼的100%以及此方法使用的方法的代碼的100%,或者只是爲了確保main方法的工作原理爲預計和每次輔助方法調用一次?
謝謝。
但是,如果有可能,誰實現了單元測試應該是不同的誰執行測試,becuse以這種方式很容易發現錯誤的方法的人。因此,實施測試的人可能不知道實施的任何內容。 –
所以,你的意思是雙方都知道類的結構,公共方法,接口,存根/僞造什麼,模擬和其他細節,除了每個函數是如何單獨實現的?不知道這是否是一個正確的做法,但我想接下來我們要接受太多的冗餘代碼和額外的努力, –
因爲這個問題是在TDD標籤提交下看,「不同的人應該寫測試」在我看來是一些非常奇特諮詢。然而,這是一個非常好的主意,讓測試的重點是行爲(即不按樣的規則,「每個方法1個單元測試」,只是測試被測系統的所有可能的用途,如果像這樣的測試練習3個不同的那個對象的方法,就這樣吧)。 – prgmtc