@DataMongoTest annotation used for test cases that only focused on MongoDB components, By default, it will configure an in-memory embedded MongoDB (if available), configure a MongoTemplate, scan for @Document classes, and configure Spring Data MongoDB repositories.
SpringExtension introduced in Spring 5, is used to integrate Spring TestContext with JUnit 5 Jupiter Test.
xxxxxxxxxx
@DataMongoTest
@ExtendWith(SpringExtension.class)
public class UserRepositoryTest {
@Autowired
private UserRepository repository;
@Test
public void shouldSaveSingleUser() {
User user = User.builder()
.firstName("firstName")
.lastName("lastName")
.phone("phone")
.email("test@gmail.com")
.role(UserRoles.ADMIN)
.password("password")
.active(false)
.build();
Publisher<User> setup = repository.deleteAll().thenMany(repository.save(user));
StepVerifier
.create(setup)
.expectNextCount(1)
.verifyComplete();
}
@Test
public void shouldSaveUser() {
String TEST_EMAIL = "test@gmail.com";
User user = User.builder()
.firstName("firstName")
.lastName("lastName")
.phone("phone")
.email(TEST_EMAIL)
.role(UserRoles.ADMIN)
.password("password")
.active(false)
.build();
Publisher<User> setup = repository.deleteAll().then(repository.save(user));
Mono<User> find = repository.findUserByEmail(TEST_EMAIL);
Publisher<User> composite = Mono
.from(setup)
.then(find);
StepVerifier
.create(composite)
.consumeNextWith(account -> {
assertNotNull(account.getId());
assertEquals(account.getEmail(), TEST_EMAIL);
assertEquals(account.getFirstName(), "firstName");
assertEquals(account.getLastName(), "lastName");
})
.verifyComplete();
}
}
https://medium.com/@BPandey/writing-unit-test-in-reactive-spring-boot-application-32b8878e2f57