Spring Webflux如何验证所有步骤是否成功执行

问题描述 投票:0回答:1

我是Spring webflux的新手,我刚刚开始webflux项目,并且被困在一个地方。

我正在使用IdFileName创建一个学生对象。

当我在studentService上调用deleteById(Long)方法时,我想先从存储中删除文件,然后再从Repository,]中删除记录。

所有这些方法都将返回Mono

下面是我给带服务和存储库的学生的代码

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())
                );

    }
}

现在,我要确认从文件存储中删除了第一个文件,然后应从数据库中删除记录。

我写了如下测试

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();
  }

但是有些测试失败了。

[有人可以帮我如何验证我所有的预期步骤吗

  • 第一个删除文件
  • 从数据库中第二次删除

我是Spring webflux的新手,我刚刚开始webflux项目,但是我被困在一个地方。我正在使用ID和FileName创建一个Student对象。当我在...

java spring-boot spring-webflux java-9
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.