【发布时间】:2012-02-04 00:59:58
【问题描述】:
我想测试一些在同一个类中调用其他方法的方法。它们基本上是相同的方法,但具有不同数量的参数,因为数据库中有一些默认值。我在此展示
public class A{
Integer quantity;
Integer price;
A(Integer q, Integer v){
this quantity = q;
this.price = p;
}
public Float getPriceForOne(){
return price/quantity;
}
public Float getPrice(int quantity){
return getPriceForOne()*quantity;
}
}
所以我想测试调用getPrice(int)方法时是否调用了getPriceForOne()方法。基本上像平常一样调用 getPrice(int) 并模拟 getPriceForOne。
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
....
public class MyTests {
A mockedA = createMockA();
@Test
public void getPriceTest(){
A a = new A(3,15);
... test logic of method without mock ...
mockedA.getPrice(2);
verify(mockedA, times(1)).getPriceForOne();
}
}
请记住,我有一个更复杂的文件,它是其他人的实用程序,它们必须都在一个文件中。
【问题讨论】:
-
你想要的是部分模拟但不推荐,Mockito 实际上不鼓励这样做,但某些特定情况除外。如果它是一个实用程序类,那么完全测试每个方法是有意义的。如果不是,即它需要复杂的处理,您可能希望使用组合来设计您的代码。