gpt4 book ai didi

spring - 响应式(Reactive) Spring Mono 和 doOnNext

转载 作者:行者123 更新时间:2023-12-01 03:15:04 31 4
gpt4 key购买 nike

我在我的项目中使用 spring-boot-starter-webflux、reactor-test 和 spring-boot-starter-test 2.0.0.M7。在我的 RepositoryInMemory.class有一个 List<String>您可以在其中添加字符串值 saveName(Mono<String> name)方法。您还可以通过 getAllNames() 询问添加到列表中的所有值。方法。问题是如何测试RepositoryInMemory.class ?我有 RepositoryInMemoryTest.class但似乎它不起作用,因为 List<String>总是返回 0。我知道问题是 doOnNext RepositoryInMemory.class 中的方法但我不知道为什么以及如何解决它。有谁知道我应该如何创建一个有效的 Junit 测试用例?

RepositoryInMemory 类(class)

package com.example

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

@Repository
public class RepositoryInMemory {

private final List<String> names = new ArrayList<>();

public Flux<String> getAllNames() {
return Flux.fromIterable(names);
}

public Mono<Void> saveName(Mono<String> name) {
return name.doOnNext(report -> names.add(report)).then();
}
}

RepositoryInMemoryTest 类(class)
package com.example

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import reactor.core.publisher.Mono;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RepositoryInMemoryTest {

@Autowired
private RepositoryInMemory repository;

@Test
public void addDataToList_ShouldReturnOne() {
Mono<String> name = Mono.just("Example Name");
repository.saveName(name);
int count = Math.toIntExact(repository.getAllNames().count().block());
assertEquals(1, count);
}
}

最佳答案

我会回答我自己的问题,因为我找到了解决方案。你唯一需要做的就是改变这一行 repository.saveName(name);到此 repository.saveName(name).block(); .已激活 doOnNext方法。

关于spring - 响应式(Reactive) Spring Mono 和 doOnNext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109581/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com