如何在java中使用mockito调用类来模拟方法

时间:2011-07-28 16:09:07

标签: java junit mockito

我有一个类从另一个类调用方法来获取报告状态。

Class A {
  private classb b = new classb();
  method x() {
    String xyz =b.method1( parm1, parm2) 
  }
}

因此,当Junit测试方法x时,在b.method()上获取空指针。我已经为b类创建了mock并且遵循了

Mockito.doReturn(val).when(classbMock).method1(parm1,parm2);

请帮助我如何模拟课程b并通过它。

由于

2 个答案:

答案 0 :(得分:2)

为了模仿b,您需要将其提供给A类的实例。

至少有几种方法可以做到这一点:

  1. 使用类似ReflectionUtils的内容在A中查找并更改字段的值
  2. A提供一个构造函数,允许您将依赖项注入A
  3. 只是模拟A.x并假设b有效(因为它有自己的单元测试)
  4. 我更喜欢选项3(假设A是被测事物的依赖而不是被测试的东西)。对于单元测试,我只想模拟直接的依赖关系,而不是所有的瞬态依赖关系。

答案 1 :(得分:0)

而不是ClassA实例化它自己的ClassB实例,而是在via A的构造函数(或setter)中传递B的实例:

public class ClassA {
     public ClassA(ClassB b) {
          this.b = b;
     }
     public void x() {
          String blah = b.method1(parm1, parm2);
     }
}

然后在测试中,您可以将B的模拟版本传递给正在测试的A的实例:

ClassB classBMock = mock(ClassB.class);
ClassA a = new ClassA(classBMock);

您的真实代码可以将ClassB的非模拟版本传递给A。