举例来说,如果有一个叫做MyControler的类,里面有两个成员ServiceA, ServiceB, MyController的getString()方法会调用两个成员的getString()方法并用“+”拼接在一起。
package com.lydia.controller;
import com.lydia.service.ServiceA;
import com.lydia.service.ServiceB;
public class MyController {
private static final MyController instance = new MyController();
private ServiceA serviceA;
private ServiceB serviceB;
public String getString(){
return serviceA.getString() + "+" + serviceB.getString();
}
}
附上ServiceA的源码
package com.lydia.service;
public class ServiceA {
private String valueA;
public String getValueA() {
return valueA;
}
public void setValueA(String valueA) {
this.valueA = valueA;
}
public String getString(){
return valueA;
}
}
附上ServiceB的源码
package com.lydia.service;
public class ServiceB {
private String valueB;
public ServiceB(String v){
valueB = v;
}
public String getString(){
return valueB+"ServiceB";
}
}
现在需要测试MyController这个类的单元测试逻辑,把serviceA和serviceB的逻辑mock掉,可以如下写,注意@RunWith不能省略,它的作用是自动把serviceA和serviceB注入到MyController里面去.
import com.lydia.controller.MyController;
import com.lydia.service.ServiceA;
import com.lydia.service.ServiceB;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
public class ControllerTest {
@Mock
ServiceA serviceA;
@Mock
ServiceB serviceB;
@InjectMocks
MyController controller;
@Test
public void testController() {
String mockedA = "MockedA";
String mockedB = "MockedB";
PowerMockito.when(serviceA.getString()).thenReturn(mockedA);
PowerMockito.when(serviceB.getString()).thenReturn(mockedB);
System.out.println(controller.getString());
}
}
运行结果如下:
MockedA+MockedB