Unit testing Mockito方法调用存根不工作-Mockito.doReturn(false).when(studentserviceinpl.myClass().isValidUser(ArgumentMatchers.anyInt());
正在为getStudent方法添加测试用例,这有内部调用 1-存储库调用-stubing此调用工作正常吗 2-验证用户调用-终止此调用不起作用,显示一些错误和测试用例失败 服务等级 测试班 错误 org.mockito.exceptions.misusing.ErrorTypeOfReturnValue:布尔值 无法由myClass返回myClass应返回MyTestClass 如果您不确定为什么会出现上述错误,请继续阅读。由于 出现上述语法问题的原因可能是: 1.此异常可能发生在错误编写的多线程测试中。请参考Mockito关于并发限制的常见问题解答 测试。 2.间谍将使用whenspy.foo.then语法进行存根。更安全的做法是让间谍- -使用doReturn |抛出方法系列。有关Mockito.spy方法的更多信息,请参阅javadocsUnit testing Mockito方法调用存根不工作-Mockito.doReturn(false).when(studentserviceinpl.myClass().isValidUser(ArgumentMatchers.anyInt());,unit-testing,junit,mocking,mockito,junit5,Unit Testing,Junit,Mocking,Mockito,Junit5,正在为getStudent方法添加测试用例,这有内部调用 1-存储库调用-stubing此调用工作正常吗 2-验证用户调用-终止此调用不起作用,显示一些错误和测试用例失败 服务等级 测试班 错误 org.mockito.exceptions.misusing.ErrorTypeOfReturnValue:布尔值 无法由myClass返回myClass应返回MyTestClass 如果您不确定为什么会出现上述错误,请继续阅读。由于 出现上述语法问题的原因可能是: 1.此异常可能发生在错误编写的多线
错误消息显示:您正在模拟studentServiceImpl.myClass并尝试返回true。在尝试使用第二个Mockito表达式时,不可能模拟调用链的结尾 要执行您想要的操作,首先需要通过返回一个mock类实例并在该实例上模拟isValidUser来模拟myClass
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
FakeStudentRepository fakeStudentRepository;
@Override
public Optional<Student> getStudent(int id) {
Optional<Student> student = fakeStudentRepository.getStudent(id);
boolean isValid = myClass().isValidUser(student.get().getId());
if(!isValid) {
return Optional.empty();
}
return student;
}
public MyTestClass myClass() {
return new MyTestClass();
}
}
public class MyTestClass {
public boolean isValidUser(int id) {
return true;
}
}
@SpringBootTest
class StudentServiceImplTest {
@Mock
FakeStudentRepository fakeStudentRepository;
@InjectMocks
StudentServiceImpl studentServiceImpl;
@BeforeEach
public void setup() {
studentServiceImpl = Mockito.spy(StudentServiceImpl.class);
MockitoAnnotations.initMocks(this);
}
@Test
void getStudent() {
Optional<Student> student = Optional.of(Student.builder().id(1).firstName("Rahul").lastName("rahul")
.mobile("XXXXXX").build());
Mockito.doReturn(student)
.when(fakeStudentRepository).getStudent(ArgumentMatchers.anyInt());
Mockito.doReturn(false)
.when(studentServiceImpl).myClass().isValidUser(ArgumentMatchers.anyInt());
Optional<Student> resultStudent = studentServiceImpl.getStudent(student.get().getId());
assertEquals(resultStudent.get().getId(), student.get().getId());
}
}