java - 使用 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 方法的最佳方法是什么?
预期的测试场景:
- verifyName() 返回
true
--> 断言或确保方法被执行。 - verifyName() return
false
--> assert 或确保方法不会被执行。
解决方案
您可以简单地编写两个场景:
@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);
}
推荐阅读
- git - git 不会在没有明确原因的情况下推送任何内容
- google-apps-script - 我可以在谷歌电子表格上的谷歌脚本上执行 getCursor() 吗?
- javascript - 如何从 JavaScript 中的表情符号中获取真正的字符代码?
- javascript - 如何获取地理位置数据并将其从浏览器发送到快递服务器
- android-studio - 向元素添加拖放功能
- java - Double.toString 总是产生与双文字完全相同的结果吗?
- python - 如何从pygame中的if语句中传输文本?
- r - 在 R 中将值转换为日期
- reactjs - React-Table:行选择 - 无法选择多行
- sql - Oracle SQL 不使用 % 运算符打印偶数 ID