Aji*_*tap 3 junit junit4 mockito spring-boot
你能告诉我我应该如何使用 Mockito 和 JUnit 为这段代码编写单元测试吗?StudentRepository 是一个扩展 JPA Repository 的接口。
public class StudentService {
@Autowired
StudentRepository studentRepository;
public void saveStudentDetails(StudentModel student) {
Student stud = new Student();
stud.setStudentId(student.getStudentId());
stud.setStudentName(student.getStudentName());
studentRepository.save(stud);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
几天前我也遇到过同样的情况,我想出了这样的事情。
@InjectMocks
StudentService studentService;
@Mock
StudentRepository studentRepository;
public void saveStudentDetailsTest(){
//given
StudentModel student = new StudentModel(Your parameters);
//when
studentService.saveStudentDetails(student);
//then
verify(studentRepository, times(1)).save(any());
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用 ArgumentCaptor 并检查你传递给 save 的对象是否是你想要的,它看起来像这样
ArgumentCaptor<Student> captor = ArgumentCaptor.forClass(Student.class);
verify(studentRepository).save(captor.capture());
assertTrue(captor.getValue().getStudentName().equals(student.getStudentName()));
Run Code Online (Sandbox Code Playgroud)
首先,您希望支持构造函数注入而不是字段注入。如果没有 StudentRepository 的依赖,studentService 就不能工作。更改后,您可以使用 Mockito 等进行单元测试。采取的步骤:
ExtendsWith(MockitoExtension.class)
如果是 junit 5,则@RunWith(MockitoJunit4ClassRunner.class)
使用 JUnit 4注释该类。@Mock
@InjectMocks
when(studentRepository.myMethod()).thenReturn(MyCustomObject())
studentRepository.save()
调用一次。作为旁注,保存不应返回 void,而应实际返回实体本身。 归档时间: |
|
查看次数: |
3154 次 |
最近记录: |