java - 如何告诉 Mockito Mock 注释返回一个不为 null 的模拟对象?

标签 java unit-testing mockito

我正在尝试对一个方法进行单元测试,该方法根据在其中创建的对象的值而具有不同的分支。下面的代码演示了它。

public class AClass {

public void method2() {
  //Some code goes here
}
public void method1(BClass bObject) {
    C_Class cObject = bObject.someMethodThatReturnsC();
    if(cObject != null) {
        method2();
        method2();
    }
}}

下面是测试类:

public class AClassTest {
@InjectMocks
AClass AClassSpy;

@Mock
BClass b_objectMock;

@Mock
C_Class c_objectMock;

@BeforeMethod
public void beforeMethod() {
  AClassSpy = spy(new AClass());      
  MockitoAnnotations.initMocks(this);
}

public void method1Test () {
    doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC());
    AClassSpy.method1(b_objectMock);
    verify(AClassSpy, times(2).method2();
}
}

但是,它总是失败,因为 c_objectMock 始终为 null。我该怎么做才能告诉 Mockito 不要返回 null 对象?

最佳答案

效果很好,只需使用 @Before来自 junit 的注释,而不是 @BeforeMethod ,并标记您的测试方法,如 @Test并从
中删除第二个括号 doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC())<-this one;
并在验证处添加括号:
verify(AClassSpy, times(2)<-here.method2();
只要照顾好你的代码就可以了!

这应该有效:

public class AClassTest {

  @InjectMocks
  private AClass AClassSpy;

  @Mock
  private BClass b_objectMock;

  @Mock
  private C_Class c_objectMock;

  @Before
  public void beforeMethod() {
      AClassSpy = spy(new AClass());
      MockitoAnnotations.initMocks(this);
  }

  @Test
  public void method1Test() {
      doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC();
      AClassSpy.method1(b_objectMock);
      verify(AClassSpy, times(2)).method2();
  }

}

您可以使用注释 @RunWith 代替 before 方法。看起来很清楚:

@RunWith(MockitoJUnitRunner.class)
public class AClassTest {

  @Spy
  @InjectMocks
  private AClass AClassSpy;

  @Mock
  private BClass b_objectMock;

  @Mock
  private C_Class c_objectMock;

  @Test
  public void method1Test() {
      doReturn(c_objectMock).when(b_objectMock).someMethodThatReturnsC();
      AClassSpy.method1(b_objectMock);
      verify(AClassSpy, times(2)).method2();
  }

}

关于java - 如何告诉 Mockito Mock 注释返回一个不为 null 的模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943139/

相关文章:

java - 对象数据库查询执行

ruby-on-rails - Rails 3 测试框架困惑

angular - 如何使用 jasmine-karna 以 Angular 对嵌套函数进行单元测试

java - 当 thenReturn 使用 any() 时,Mockito 出现错误 "Value must not be null"

Java:将命名和未命名参数的组合传递给可执行 jar/main 方法

java - Android - 从 USB 接收佳能(相机)事件

java - 使用 Apache TIKA 解析文本时如何指定编码?

javascript - 单元测试未定义不是一个对象(评估 'this.groups.map' )

java - Mockito - 模拟遗留类构造函数

java - 如何模拟在测试方法中创建的对象?