假设我想为这样的方法创建一个单元测试:
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对象中。但这需要做很多工作,对吗?
难道没有更明智的方式吗?
答案 0 :(得分:4)
您想测试该方法的逻辑。
因此,如果该方法的作用是将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());
// ...
}
答案 1 :(得分:0)
我不太确定问题是什么?当然,因为该方法需要一个请求并返回一个新的Car
,这正是您想要测试的内容吗?如果我这样做,我会:
Car
字段是请求中的内容Car
?你说所有的方法都是呼叫设定者/吸气者,但不要忘记单位测试的一个目的是断言行为保持不变(即你'重新测试回归)。如果您为此方法添加了其他功能,并且意外破坏了某些内容,则上述测试会立即告诉您。
这是很多工作吗?也许(可能是几分钟的复制/粘贴getter / setter调用和更改params,每个属性都是唯一的)。但与以后解决生产中的问题相比,它的工作要少得多。
答案 2 :(得分:0)
我可以创建一个测试carReq对象(没有嘲笑)并检查它 将相同的值复制到输出Car对象中。但那是一个 很多工作,对吧?
确实如此,但如果你真的愿意对这种方法进行单元测试,你就必须这样做。 请注意,您可以使用像Orika这样的库来为您执行这种愚蠢的字段映射方法。节省时间和代码行:))