这里有一个Service
类和一个Util
类,其中有两个static方法,如图所示.
public class Service {
public String doSomething() {
return "something";
}
}
public final class Util {
public static String utilFuncCallingService(Service service) {
//some code
System.out.println("Util class calling doSomething on service");
return service.doSomething();
}
public static String utilFuncReturningString() {
return "string";
}
}
主类(SUT)是,
public class MyClass {
public final Service service;
public MyClass(Service service) {
this.service = service;
}
public void method() {
System.out.println("Response: " + Util.utilFuncCallingService(service));
}
}
它调用传递Service
实例的Util.utilFuncCallingService
方法.
JUnit测试是:
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Mock
private Service service;
@Before
public void setup() {
when(Util.utilFuncCallingService(service))
.thenReturn("mock-response");
}
@Test
public void test() {
MyClass myClass = new MyClass(service);
myClass.method();
}
}
运行这个,它会打印出来,
Util class calling doSomething on service
Util class calling doSomething on service
Response: mock-response
第一行是在setup
次测试期间打印的,第二行是在实际测试期间打印的.
- 存根调用
when(Util.utilFuncCallingService(service)).thenReturn(..)
怎么会变成这里编写when(service.doSomething()).thenReturn("mock-response")
的类似功能呢?
Mockito不会允许我们存根Util.utilFuncReturningString()
,因为它是一个静态方法.Util.utilFuncCallingService()
的存根调用在这里是如何工作的?
我经常使用JUnit,但我觉得这里遗漏了一些非常基本的东西.