testable-mock icon indicating copy to clipboard operation
testable-mock copied to clipboard

MockMethod注解无法生效

Open huangjiamei opened this issue 4 years ago • 1 comments

无法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();
}

}

huangjiamei avatar Jul 22 '21 09:07 huangjiamei

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是该方法实际所属的类型,而不是当前被测类。

linfan avatar Jul 25 '21 07:07 linfan