java springboot reactive assertNotNull在Mono.doOnNext中不起作用

vhmi4jdf  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(82)

我试着做单元测试用例这里是我的功能。

@SpringBootTest
    public class ABCTests{

    @Autowired
    private VDao vDao;
    
    @Test
    public void addDummyVan() {
        Mono<Van> vmono = Mono.just(createDummyVan());
        vDao.addVan(vmono).doOnNext(v-> assertNotNull(v.getId()));
      }
    }

为了测试这个。在vDao.addVan函数中,我返回Mono<Van>,其中货车对象故意将id值保持为null。但测试用例仍未失败。

ruarlubt

ruarlubt1#

在您的代码中,doOnNext运算符用于副作用,它不会影响测试Assert。assertNotNull调用不是React流的一部分,因此它不会在React流的执行期间执行。
要正确测试addVan方法的行为,您应该使用为React式代码设计的测试框架,例如Project Reactor的StepVerifier。以下是如何修改测试以使用StepVerifier

import reactor.test.StepVerifier;

@SpringBootTest
public class ABCTests {

    @Autowired
    private VDao vDao;

    @Test
    public void addDummyVan() {
        Mono<Van> vmono = Mono.just(createDummyVan());
        
        StepVerifier.create(vDao.addVan(vmono))
            .expectNextMatches(v -> v.getId() != null)
            .verifyComplete();
    }
}

在此修改后的测试中:
1.我们使用StepVerifier.createvDao.addVan(vmono)返回的React流创建一个验证器。
1.我们使用expectNextMatches来期望流(v)发出的下一个元素满足v.getId()不为null的条件。
1.我们使用verifyComplete来确保流在发出预期的元素后成功完成。
使用这种方法,如果addVan方法在React流中发出Van对象之前没有正确设置id对象中的id字段,则测试将失败。这允许您准确地测试响应式代码的行为。

相关问题