Java Spring Webflux如何验证所有步骤都已成功执行
我是春季webflux的新手,我刚刚开始webflux项目,我被困在一个地方 我正在创建一个具有Id和文件名的学生对象 在studentService上调用deleteById(Long)方法时,首先要从存储中删除文件,然后要从存储库中删除记录 所有这些方法都返回Mono 下面是我为学生提供的服务和存储库代码Java Spring Webflux如何验证所有步骤都已成功执行,java,spring-boot,spring-webflux,java-9,Java,Spring Boot,Spring Webflux,Java 9,我是春季webflux的新手,我刚刚开始webflux项目,我被困在一个地方 我正在创建一个具有Id和文件名的学生对象 在studentService上调用deleteById(Long)方法时,首先要从存储中删除文件,然后要从存储库中删除记录 所有这些方法都返回Mono 下面是我为学生提供的服务和存储库代码 public class Student { private Long id; private String fileName; //getter & setter
public class Student {
private Long id;
private String fileName;
//getter & setter
}
public class StudentRepository {
public Mono<Student> findById(long l){
Student sample = new Student();
sample.setFileName("file-name");
sample.setId(1L);
return Mono.just(sample);
}
public Mono<Void> deleteFile(String fileName) {
return Mono.empty();
}
public Mono<Void> deleteById(Long id) {
return Mono.empty();
}
}
public class StudentService {
private StudentRepository repository;
public void setRepository(StudentRepository repository) {
this.repository = repository;
}
public Mono<Student> findById(long l){
Student sample = new Student();
sample.setFileName("file-name");
sample.setId(1L);
return Mono.just(sample);
}
public Mono<Void> deleteById(Long id){
return repository.findById(id)
.flatMap(student ->
repository.deleteFile(student.getFileName()).thenReturn(student)
)
.flatMap(studentMono ->
repository.deleteById(studentMono.getId())
);
}
}
公共班级学生{
私人长id;
私有字符串文件名;
//吸气剂和塞特
}
公共班级学生公寓{
公共单声道findById(长l){
学生样本=新学生();
setFileName(“文件名”);
样本集ID(1L);
返回Mono.just(示例);
}
公共文件(字符串文件名){
返回Mono.empty();
}
公共单删除字节id(长id){
返回Mono.empty();
}
}
公共班级学生服务{
私人科研储备库;
公共存储库(StudentRepository存储库){
this.repository=存储库;
}
公共单声道findById(长l){
学生样本=新学生();
setFileName(“文件名”);
样本集ID(1L);
返回Mono.just(示例);
}
公共单删除字节id(长id){
返回repository.findById(id)
.flatMap(学生->
repository.deleteFile(student.getFileName())。然后返回(student)
)
.flatMap(studentMono->
repository.deleteById(studentMono.getId())
);
}
}
现在,我想验证是否从文件存储中删除了第一个文件,然后应该从数据库中删除记录
我写的测试如下
public void test(){
StudentService studentService = new StudentService();
StudentRepository studentRepository = mock(StudentRepository.class);
studentService.setRepository(studentRepository);
Student student = new Student();
student.setFileName("file-name");
student.setId(1L);
Mono<Student> studentMono = Mono.just(student);
Mockito.when(studentRepository.findById(1L)).thenReturn(studentMono);
studentService.deleteById(1L);
StepVerifier.create(studentMono)
.expectNextMatches(leadImport->leadImport.getFileName().equals("file-name"))
.expectNextMatches(leadImport -> leadImport.getId() == 1L)
.verifyComplete();
}
公共无效测试(){
StudentService StudentService=新的StudentService();
StudentRepository StudentRepository=mock(StudentRepository.class);
studentService.setRepository(studentRepository);
学生=新生();
setFileName(“文件名”);
学生setId(1L);
Mono studentMono=Mono.just(学生);
Mockito.when(studentRepository.findById(1L)),然后返回(studentMono);
studentService.deleteById(1L);
StepVerifier.create(studentMono)
.expectNextMatches(leadImport->leadImport.getFileName().equals(“文件名”))
.expectNextMatches(leadImport->leadImport.getId()==1L)
.verifyComplete();
}
但是我的测试失败了
有人能帮我验证一下我所有的预期步骤吗
- 第一次删除文件
- 从数据库第二次删除
StepVerifier.create(studentMono)
.expectNextMatches(leadImport->leadImport.getFileName().equals("file-name") && leadImport.getId() == 1L)
.verifyComplete();
首先想到的是repository.deleteFile(student.getFileName());返回Mono.just(学生);您正在功能世界中编写命令。您需要链接返回的Mono.empty,因为在您订阅之前不会发生任何事情。将其重写为:return repository.deleteFile(student.getFileName())。然后返回(student)@ThomasAndo如果我按照您的建议更改了deleteById方法,但仍然要如何验证调用?使用此代码,如何验证调用存储库。deleteById(studentMono.getId())是否正在执行?如果您希望验证对mock的调用,有几种方法