如何在JUnit测试中覆盖类行为

时间:2018-09-30 17:29:56

标签: java unit-testing testing junit mockito

我正在尝试为类A中的方法创建JUnit测试,该方法创建类B的实例。由于我想隔离该方法的行为,因此我想用更简单的方法覆盖测试套件中B的方法可以用于测试A。

我尝试使用Mockito的Spy这样做,但是据我所知,它仅允许在方法调用时返回静态值,但是在考虑传递的参数的同时,我需要用更简单的外部逻辑替换复杂的外部逻辑。 / p>

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果我答对了,代码示例可能看起来像这样

public class A {
    public T doSth(){
       String result = new B().callMethod();
    }
}

要使A更具可测试性,如果您能够修改源代码,则以下方法可能会有用。

public class A {
    private MyInterface b;
    public A(MyInterface b){
      this.b = b;
    }
    public T doSth(){
       String result = b.callMethod();
    }
}
  1. 介绍B类正在实现的接口
  2. 通过setter方法或构造函数注入B的实例,以确保A类仅依赖于接口
  3. 现在您可以使用Mockito之类的模拟框架来配置结果值,也可以只使用一个测试存根(实现您喜欢的接口和逻辑的内部类)

欢呼