[英]Unit tests for mapping methods that call getters and setters
假設我想為這樣的方法創建一個單元測試:
public Car map(CarReq request) {
Car car = new Car();
car.setPrice(carReq.getPrice());
car.setColour(carReq.getColour());
car.setType(carReq.getType());
// Other 20 lines like these
return car;
}
我可以模擬carRequest並告訴每個方法應該返回什么。 但這就像沒有測試任何東西一樣,因為所有方法所做的都是從carReq獲取值。
我可以創建一個測試carReq對象(不帶模擬),並檢查是否將相同的值復制到輸出Car對象中。 但這是很多工作,對嗎?
有沒有更聰明的方法?
您要測試方法的邏輯。
因此,如果該方法所做的是將CarReq
的屬性復制到Car
,則應測試以下內容:
@Test
public void mapTest() {
// Given
CarReq carReq = new CarReq(10000D, ...);
// When
Car car = myClass.map(carReq);
// Then
Assert.assertEquals(car.getPrice(), carReq.getPrice());
// ...
}
我不太確定這是什么問題? 當然,由於該方法接受了一個請求並返回了一個新的Car
,這正是您要測試的內容嗎? 如果這樣做,我會:
Car
字段是請求中的內容 Car
? 您說該方法所做的只是調用設置器/獲取器,但是請不要忘記, 單元測試的一個目的是斷言今后的行為仍然相同(即,您正在測試回歸) 。 如果您為此方法添加了其他功能,並且不小心破壞了某些內容,上述測試將立即告訴您。
這工作很多嗎? 也許(也許幾分鍾的復制/粘貼getter / setter調用和將參數更改為每個屬性都是唯一的)。 但這比以后解決生產中的問題要少得多。
我可以創建一個測試carReq對象(不帶模擬),並檢查是否將相同的值復制到輸出Car對象中。 但這是很多工作,對嗎?
是的,但是如果您真的願意對該方法進行單元測試,則必須執行此操作。 請注意,您可以使用Orika之類的庫來為您執行這種愚蠢的字段映射方法。 節省時間和代碼行:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.