用于调用getter和setter的映射方法的单元测试

时间:2015-12-30 14:56:45

标签: java unit-testing

假设我想为这样的方法创建一个单元测试:

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对象中。但这需要做很多工作,对吗?

难道没有更明智的方式吗?

3 个答案:

答案 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,这正是您想要测试的内容吗?如果我这样做,我会:

  1. 创建已填充的请求,并确定Car字段是请求中的内容
  2. 或许断言每次调用都会给你一个新的Car
  3. 如果传入空值(再次,取决于方法的建议用法),则断言预期行为
  4. 你说所有的方法都是呼叫设定者/吸气者,但不要忘记单位测试的一个目的是断言行为保持不变(即你'重新测试回归)。如果您为此方法添加了其他功能,并且意外破坏了某些内容,则上述测试会立即告诉您。

    这是很多工作吗?也许(可能是几分钟的复制/粘贴getter / setter调用和更改params,每个属性都是唯一的)。但与以后解决生产中的问题相比,它的工作要少得多。

答案 2 :(得分:0)

  

我可以创建一个测试carReq对象(没有嘲笑)并检查它   将相同的值复制到输出Car对象中。但那是一个   很多工作,对吧?

确实如此,但如果你真的愿意对这种方法进行单元测试,你就必须这样做。 请注意,您可以使用像Orika这样的库来为您执行这种愚蠢的字段映射方法。节省时间和代码行:))