필요의존
- 일단, Reactive 한 MongoRepository 를 만드려면, Spring-data-Mongo-Reactive 의존이 필요
- Spring-Data-Mongo-Reactive 의존이 없다면 de.flapdoodle.embed.mongo 가 모조리 터져버림
- 리엑티브 스트림 기반으로 만들어진 io.projectreactor:reactor-test 의존도 필요함.
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation 'io.projectreactor:reactor-test'
implementation "org.springframework.boot:spring-boot-starter-data-mongodb-reactive"
testImplementation "de.flapdoodle.embed:de.flapdoodle.embed.mongo"
이후, Repository 의 구현 인터페이스는 ReactiveMongoRepository<Entity, Id> 로 변경 됨
@Transactional(readOnly = true)
public interface ProductRepository extends ReactiveCrudRepository<ProductEntity,String> {
Optional<ProductEntity> findByProductId(int productId);
}
비동기 방식의 테스트는 비동기 시퀀스 스트림을 만드는 StepVerifier , Mono & Flux 의 block() 메서드로 결과를 기다리게 됨
@BeforeEach
public void setUpDb() {
System.out.println("Before");
StepVerifier.create(productRepository.deleteAll()).verifyComplete();
ProductEntity entity = new ProductEntity(1, "n", 1);
StepVerifier.create(productRepository.save(entity))
.expectNextMatches(createdEntity -> {
productEntity = createdEntity;
return areProductEqual(entity, productEntity);
})
.verifyComplete();
}
@Test
public void create() {
ProductEntity newEntity = new ProductEntity(2, "n", 2);
StepVerifier.create(productRepository.save(newEntity))
.expectNextMatches(createdEntity -> newEntity.getProductId() == createdEntity.getProductId())
.verifyComplete();
StepVerifier.create(productRepository.findById(newEntity.getId()))
.expectNextMatches(foundEntity -> areProductEqual(newEntity, foundEntity))
.verifyComplete();
StepVerifier.create(productRepository.count()).expectNext(2l).verifyComplete();
}
'작업하면서 배우는 것들' 카테고리의 다른 글
MapStruct (0) | 2021.01.12 |
---|---|
SpringFox:Swagger3 사용 (0) | 2021.01.05 |
QueryDsl Left Outer Join, Tuple, Projections (0) | 2020.12.27 |
QueryDsl 과 커스텀 리포지토리를 이용한 쿼리문 사용 (0) | 2020.12.27 |
JPA Projection FindAll (0) | 2020.12.24 |