我需要对几种类似于以下方法的方法进行单元测试。 ProductItem类很小,它是嵌套的。测试这种方法的一种方法是我花时间为ProductItem构建一个对象并将其传递给方法,但我觉得它太繁琐了。有没有好的方法来测试它而不构建整个对象?
public BigDecimal getSubtotal(ProductItem ip) {
return ip.getTotal().subtract(ip.getTotalTax())
.subtract(ip.getShipping());
}
答案 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)
例如