调用Mockito.Times时,Mockito验证失败

时间:2019-02-06 12:43:58

标签: java junit mockito

class Display extends JFrame{
  public void setImage(Image image) {
    this.setIconImage(image);
  }
}

测试

public class DisplayConfigurationTest {
  @Mock
  private DisplayConfiguration displayMock;

  @Test
  public void setFrame_Icon_shouldSetWindowIcon() throws Exception {        
    displayMock.setImage(null);
    verify(displayMock, times(1)).setIconImage(null);
  }
}

测试抛出错误:

想要但不被调用: displayMock.setIconImage(null); ->在DisplayConfigurationTest.setFrame_Icon_shouldSetWindowIcon(DisplayConfigurationTest.java)

但是,此模拟还有其他交互作用: displayMock.setImage(null); -> DisplayConfigurationTest.setFrame_Icon_shouldSetWindowIcon(DisplayConfigurationTest.java)

1 个答案:

答案 0 :(得分:0)

@Mock对象时,该对象的方法有效地停止工作。然后,您可以告诉模拟程序调用任何方法(包括callRealMethod())时应该发生什么。因此,在您的示例中,您可以检查setImage()是否被调用过1次,但是setIconImage()不会被调用。

您真正想要的是一个 real Display(或DisplayConfiguration-您的代码尚不清楚),其中所有成员对象都@Mock

或者,在当前代码中,您可以将其添加为测试方法的第一行:

when(displayMock.setImage(any())).thenCallRealMethod();