Java 如何使用JUnit和Mockito测试void方法?

Java 如何使用JUnit和Mockito测试void方法?,java,unit-testing,mockito,junit4,Java,Unit Testing,Mockito,Junit4,我的void方法更改类中的boolean变量值。我怎么检查 我有: 模拟类对象 使用适当的参数调用该方法 检查了实例变量 但这不会改变实例变量的值。我该怎么做 ReferenceLettersBean rf = Mockito.mock(ReferenceLettersBean.class); rf.setBoolcheck(false); Mockito.doNothing().when(rf).checkForDuplicates(anyString(), anySt

我的
void
方法更改类中的
boolean
变量值。我怎么检查

我有:

  • 模拟类对象
  • 使用适当的参数调用该方法
  • 检查了实例变量
但这不会改变实例变量的值。我该怎么做

ReferenceLettersBean rf = Mockito.mock(ReferenceLettersBean.class);
     rf.setBoolcheck(false);

Mockito.doNothing().when(rf).checkForDuplicates(anyString(),     anyString(), anyString());
         rf.checkForDuplicates("abcd@emal.com","abd@gmail.com","abcd@gmail.com");
assertEquals(true,rf.getBoolcheck());

此布尔值似乎是一个内部状态。这不是可以用单元测试直接测试的东西,除非你将它公开,或者通过影响另一种方法的行为可以检测到它。

  • 不要模仿你要测试的课程
  • 模拟与要测试的类交互的类
如果您想测试类中的字段是否从false变为true,您真正想做的是(我没有实际的构造函数,我只是猜测):


对在上面添加了代码
SomeDependency dependency = mock(SomeDependency.class);

// Make a REAL ReferenceLettersBean
ReferenceLettersBean bean = new ReferenceLettersBean(dependency);

// now make your test
rf.checkForDuplicates("abcd@emal.com","abd@gmail.com","abcd@gmail.com");
assertEquals(true,rf.getBoolcheck());