具有复杂对象依赖性的单元测试

时间:2014-03-31 16:14:51

标签: java unit-testing

我需要对几种类似于以下方法的方法进行单元测试。 ProductItem类很小,它是嵌套的。测试这种方法的一种方法是我花时间为ProductItem构建一个对象并将其传递给方法,但我觉得它太繁琐了。有没有好的方法来测试它而不构建整个对象?

public BigDecimal getSubtotal(ProductItem ip) {
    return ip.getTotal().subtract(ip.getTotalTax())
            .subtract(ip.getShipping());
}

1 个答案:

答案 0 :(得分:2)

您可以使用模拟库,例如Mockito。例如:

final ProductItem mock = mock(ProductItem.class);
when(mock.getTotal()).thenReturn(something);
// same for .getTotalTax(), .getShipping()

然后您可以测试.getSubtotal()方法:

// Using BigDecimal's .compareTo() for reliable results...
// "0" and "0.0" are not .equals() with BigDecimal!
assertTrue(xxx.getSubtotal(mock).compareTo(expectedResult) == 0);

请注意,不以此方式存根的方法将返回默认值:0表示基元,null表示对象,false表示布尔值。

注意2:要求ProductItem不是final,并且您存根的方法也不是final;否则你将不得不使用PowerMockito并且必须写一些胶水......

注3:也适用于抽象类和接口;你可以mock(Comparator.class)例如