首页 > 解决方案 > 使用 JUnit 测试具有布尔条件的 void 方法

问题描述

我正在尝试使用 Junit 测试内部具有布尔条件的 void 方法

/** Method to create request */
public void createRequest(String name) {

  if (verifyName(name)) {
    testRepo.getRequest(name); // Void method from test repo
    demoRepo.testMethod(name); // Another void method from demo repo
  }
}

/** Validate name */
private boolean verifyName(String name) {

 return "Test".equals(name);
}

true/false在这种情况下,当 verifyName() 返回JUnit时,测试 void 方法的最佳方法是什么?

预期的测试场景:

  1. verifyName() 返回true--> 断言或确保方法被执行。
  2. verifyName() return false--> assert 或确保方法不会被执行。

标签: javaspringspring-bootjunit

解决方案


您可以简单地编写两个场景:

@Captor
private String ArgumentCaptor<String> nameCaptor;

@Test
public void testForValidName() {
    service.createRequest("Test");
    Mockito.verify(testRepo, Mockito.times(1)).getRequest(nameCaptor.capture());
    Mockito.verify(demoRepo, Mockito.times(1)).testMethod(nameCaptor.capture());
    List<String> capturedValues = nameCaptor.getValues();
    Assert.assertEquals("Test", capturedValues.get(0));
    Assert.assertEquals("Test", capturedValues.get(1));
}

@Test
public void testForInValidName() {
   service.createRequest("Test1");
   Mockito.verifyNoMoreInteractions(testRepo);
   Mockito.verifyNoMoreInteractions(demoRepo);
}

推荐阅读