I use spring-boot-starter-webflux, reactor-test and spring-boot-starter-test 2.0.0.M7 in my project. In my RepositoryInMemory.class
has a List<String>
where you can add String values by saveName(Mono<String> name)
method. You can also ask all the values that are added to the list by getAllNames()
method. Problem is that how to test RepositoryInMemory.class
? I have RepositoryInMemoryTest.class
but seems like that it does not work because List<String>
returns always 0. I know that the problem is doOnNext
method in RepositoryInMemory.class
but I don't know why and how to solve it. Does anyone know that how I should create a valid Junit test case?
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);
}
}