java - 如何模拟正在测试同一类的另一个方法中调用的类的方法?

标签 java mockito junit4

例如,有一个类 A,它有两个方法 methodUnderTest() 和 display(),其中 methodUnderTest 调用 display 方法。使用mockito编写junit时如何模拟display()方法?

class A{
public int method methodUnderTest{
   //some code
   display();
}

public int display(){
  //some code
}

}

最佳答案

如果这是你的类(class):

    public static class A{
        public int methodUnderTest() {
            return display();
        }

        public int display(){
            return 1;
        }
    }

然后使用mockito,你可以这样做:

        A a = spy(new A());
        when(a.display()).thenReturn(0);
        System.out.println(a.methodUnderTest()); // will print 0

说明:

当你mock()一个类时,没有底层实例,除非另有指定,否则你调用的所有方法都不会执行任何操作并返回默认值。

当您spy()某个实例时,所有调用都会被记录,并转发到实际实例。这意味着除非您模拟特定的调用,否则您的类行为将保持完全相同。

<小时/>

话虽如此,像你这样的情况通常是你需要拆分类(class)的症状,并在 separating your concerns 上投入一些。 .

关于java - 如何模拟正在测试同一类的另一个方法中调用的类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56784899/

相关文章:

android - 找不到Gradle DSL方法:testCompile()

java - Junit测试扫描仪输入问题

java - 在云上部署 Netbeans Web 应用程序

java - 使用嵌入式 Tomcat 启动 Spring 应用程序 (STS) 时,java.exe 和 javaw.exe 进程都在同一端口上创建

python mockito 参数捕获器

android - 如何模拟 Android 仪器测试的共享首选项?

java - Mockito/Spring MVC - (注解驱动)请求映射动态验证

java - 使用另一个 Suite 类启动 Suite 类

java - SwingWorker的重复执行

Java流——查找唯一元素