testable-mock
testable-mock copied to clipboard
MockMethod注解无法生效
无法mock,在调用AgentIServiceImpl类的 getAvailableAgentCount方法时,agentMapper一直报空指针的错。 测试类:
public class AgentIServiceImplTest {
private AgentIServiceImpl agentIService = new AgentIServiceImpl();
public static class Mock {
@MockMethod(targetClass = AgentIServiceImpl.class)
public int getAvailableCount() {
System.out.println("mock生效");
return 1;
}
@MockMethod(targetClass = AgentIServiceImpl.class)
public Map<String, Object> getAvailableRegionCount() {
System.out.println("mock生效");
return new HashMap<>();
}
}
@Test
public void testGetAvailableCount() {
Map<String, Object> res = agentIService.getAvailableRegionCount();
assertNotNull(res);
//int count = agentIService.getAvailableAgentCount();
//assertEquals(1, count);
}
}
源类: public class AgentIServiceImpl extends ServiceImpl<AgentMapper, Agent> implements AgentIService {
@Resource
private AgentMapper agentMapper;
@Override
public int getAvailableCount() {
return agentMapper.getAvailableAgentCount();
}
@Override
public Map<String, Object> getAvailableRegionCount() {
return agentMapper.queryAgentRegionCount();
}
}
TestableMock提供Mock是基于调用替换的,比如在AgentIServiceImpl类的代码中,有agentMapper.getAvailableAgentCount()和agentMapper.queryAgentRegionCount()这两个调用,需要在测试的时候被置换成Mock方法,只需将您的示例代码中的Mock内部类定义改为如下,即可通过测试:
public static class Mock {
@MockMethod(targetClass = AgentMapper.class)
public int getAvailableAgentCount() {
System.out.println("mock生效");
return 1;
}
@MockMethod(targetClass = AgentMapper.class)
public Map<String, Object> queryAgentRegionCount() {
System.out.println("mock生效");
return new HashMap<>();
}
}
每个Mock方法的targetClass是该方法实际所属的类型,而不是当前被测类。