【发布时间】:2020-07-24 00:48:07
【问题描述】:
我正在尝试学习 Mockito 3,我在 google 搜索中查看了几乎所有结果,但找不到有效的解决方案。
我在一个测试用例中调用processStudent,它基于内部输入调用另一个方法saveStudent 或saveNullStudent。
public String processStudent(String student) {
System.out.println("StudentService.processStudent: it will process Student = " + student);
String StudentRes;
if (Objects.isNull(student)) {
StudentRes = saveNullStudent(student);
return StudentRes;
} else {
StudentRes = saveStudent(student);
return StudentRes;
}
}
public String saveNullStudent(String student) {
System.out.println("StudentService.saveNullStudent: it will process then save Student = " + student);
return student;
}
public String saveStudent(String student) {
System.out.println("StudentService.saveStudent: it will process then save Student = " + student);
return student;
}
我需要测试这两种情况,所以我的测试用例是
@Test
void saveStudentWithMockTest() {
StudentService StudentService = mock(StudentService.class);
StudentService.processStudent("studentA");
verify(StudentService, times(1)).saveStudent("studentA");
}
@Test
void saveStudentWithNullMockTest() {
StudentService StudentService = mock(StudentService.class);
StudentService.processStudent(null);
verify(StudentService, times(1)).saveNullStudent(null);
}
但我得到了
Wanted but not invoked:
studentService.saveNullStudent(null);
-> at StudentServiceTest.saveStudentWithNullMockTest(StudentServiceTest.java:21)
However, there was exactly 1 interaction with this mock:
studentService.processStudent(null);
-> at StudentServiceTest.saveStudentWithNullMockTest(StudentServiceTest.java:20)
Gradle 文件
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
testCompile 'org.mockito:mockito-junit-jupiter:3.4.4'
}
我不明白,这不是mockito的用途吗?
这个测试用例的重点不是单元测试,而是测试processStudent 方法的行为,根据输入数据,如果值为空,则调用saveNullStudent 方法,否则调用saveStudent 方法调用。
我做错了什么?
【问题讨论】: