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

mock 没有生效

Open yucs2019 opened this issue 4 years ago • 2 comments

有没有交流群呢、 mock没有生效 没有 Found method xxx used 日志、还有什么检查方法呢 利用@MockWith 使用mock容器、但是没有发生替换


其中Line XX, mock method "XXX" used日志展示了被测类中所有发生了Mock替换的调用和相应代码行号。

依据需排查的测试类,进行针对性排查。假设被测类为"com.demo.BizService",测试类为"com.demo.BizServiceTest",Mock容器类为"com.demo.BizServiceTest.Mock":

若该日志文件未生成,请检查pom.xml或build.gradle配置是否正确引入了TestableMock依赖 若日志中只能找到com/demo/BizServiceTest$Mock,没有找到被测类和测试类,请检查Mock容器类的名称和位置是否符合规范 若日志中找到了Mock类和测试类,但没有找到被测类com/demo/BizService,请检查被测类与测试类是否包路径相同,且名称为"被测类+Test",或者是否正确的使用了@MockWith注解 若日志中三个类都已经找到,且有Found method xxx,但预期的代码行位置没有发生Mock替换,请继续检查Mock方法定义是否未与目标方法匹配


yucs2019 avatar Nov 17 '21 07:11 yucs2019

public class Demo {
    public static int num(int i, int j) {
        return i + j;
    }

    public long time() {
        return System.currentTimeMillis();
    }
}

@MockDiagnose(LogLevel.VERBOSE)
public class DemoMock {

    @MockInvoke
    public static int num(Demo self, int i, int j) {
        System.out.println("mock ..");
        return 999;
    }

    @MockInvoke
    public long time(Demo self) {
        return 111l;
    }
}

@MockDiagnose(LogLevel.VERBOSE)
@MockWith(DemoMock.class)
public class DemoTest {
    private final Demo demo = new Demo();

    @Test
    public void test() {
        System.out.println(Demo.num(100, 11));
        InvocationVerifier.verifyInvoked("num").withTimes(1);
    }

    @Test
    public void test1() {
        System.out.println(demo.time());
        InvocationVerifier.verifyInvoked("time").withTimes(1);
    }
}

yucs2019 avatar Nov 17 '21 07:11 yucs2019

在测试用例里的调用不会被Mock,只有被测类(业务类)源码里的调用才会生效

见文档的特别说明部分

linfan avatar Nov 22 '21 06:11 linfan