我正在研究一種可以被認爲是另一種已經定義和測試過的方法的專門化方法。下面是一個例子代碼來說明:如何測試依賴於另一個已經測試過的方法的方法?
public class ProductService {
public void addProduct(Product product) {
//do something
}
public void addSpecialProduct(Product product) {
addProduct(product);
//do something after
}
}
我並不想複製我有addProduct
這已經是相當複雜的測試。我想要的是當我爲addSpecialProduct
定義測試時,我只需確保它在過程中也調用addProduct
。如果這是兩類合作的問題,那麼很容易讓協作者嘲笑,並驗證目標方法被調用(並在必要時存根)。但是,這兩種方法屬於同一類。
我在想什麼,現在是來窺探我測試的對象,像:
public void testAddSpecialProduct() {
//set up code
ProductService service = spy(new DefaultProductService());
service.addSpecialProduct(specialProduct);
verify(service).addProduct(specialProduct);
//more tests
}
不過,我不知道這種做法是否以某種方式違背了單元測試的目的。關於這個問題的普遍共識是什麼?
您可以在測試實用程序方法中爲您的'addProduct'方法聲明並在多個測試用例之間重複使用它嗎? – chrylis
這個類聽起來有點代碼味道,將這2個功能(產品和特殊產品)組合成2個獨立的類(然後你的測試變得明顯和容易)會更好。具有通用的「添加」和「專業添加」可以擊敗單一責任。 – kuhajeyan
@chrylis實際上聽起來很合理,是的。我忘記了我之前做過類似的事情。 –