반응형
BasicTest
@Slf4j
public class BasicTest {
@Test
public void test1() {
Flux<Integer> flux = Flux.range(1, 3);
StepVerifier.create(flux.log())
.expectNext(1)
.expectNext(2)
.expectNext(3)
.verifyComplete();
}
@Test
public void test2() {
Flux<Integer> flux = Flux.range(1, 3);
StepVerifier.create(flux.log())
.expectNext(1, 2, 3)
.verifyComplete();
}
@Test
public void test3() {
Flux<String> flux = Flux.just("A", "B", "C")
.delayElements(Duration.ofSeconds(1))
.doFinally(signalType -> {
log.warn("signalType : {}", signalType);
});
StepVerifier.create(flux.log())
.expectNext("A", "B")
.thenCancel()
.verify();
}
@Test
public void test4() {
VirtualTimeScheduler.getOrSet();
Flux<Long> flux = Flux.interval(Duration.ofSeconds(1)).take(3);
StepVerifier.withVirtualTime(() -> flux.log())
.thenAwait(Duration.ofSeconds(10))
.expectNext(0L, 1L, 2L)
.verifyComplete();
}
}
ErrorTest
public class ErrorTest {
@Test
public void test1() {
Flux<Integer> flux = Flux
.range(1, 3)
.concatWith(Flux.error(new RuntimeException()));
StepVerifier.create(flux)
.expectNext(1, 2, 3)
.expectError(RuntimeException.class)
.verify();
}
@Test
public void test2() {
Flux<Integer> flux = Flux
.range(1, 3)
.concatWith(Flux.error(new RuntimeException("Some Error")));
StepVerifier.create(flux)
.expectNext(1, 2, 3)
.expectErrorMessage("Some Error")
.verify();
}
@Test
public void test3() {
Flux<String> flux = Flux.just("A", "B", "C")
.concatWith(Flux.error(new RuntimeException("Some Error")))
.onErrorReturn("some default value");
StepVerifier.create(flux)
.expectNext("A", "B", "C")
.expectNext("some default value")
.verifyComplete();
}
@Test
public void test4() {
Flux<String> flux = Flux.just("A", "B", "C")
.concatWith(Flux.error(new RuntimeException("Some Error")))
.onErrorResume(throwable -> Flux.just("D"));
StepVerifier.create(flux.log())
.expectNext("A", "B", "C")
.expectNext("D")
.verifyComplete();
}
}
MockTest
@SpringBootTest
public class MockTest {
@InjectMocks
private StudentController studentController;
@Mock
private StudentService studentServiceMock;
@Test
public void test1() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
StepVerifier.create(studentController.getStudents().log())
.expectSubscription()
.expectNext(student)
.verifyComplete();
}
}
ControllerTest
@SpringBootTest
@AutoConfigureWebTestClient
public class ControllerTest {
@Autowired
private WebTestClient webTestClient;
@MockBean
private StudentService studentServiceMock;
@Test
public void test1() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
webTestClient.get()
.uri("/api/students")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().is2xxSuccessful()
.expectBody()
.jsonPath("$.[0].id").isEqualTo(student.getId())
.jsonPath("$.[0].name").isEqualTo(student.getName())
.jsonPath("$.[0].age").isEqualTo(student.getAge());
}
@Test
public void test2() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
webTestClient.get()
.uri("/api/students")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().is2xxSuccessful()
.expectBodyList(Student.class)
.hasSize(1)
.contains(student);
}
@Test
public void test3() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudent(ArgumentMatchers.anyString())).thenReturn(Mono.just(student));
webTestClient.get()
.uri("/api/students/{id}", student.getId())
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().is2xxSuccessful()
.expectBody(Student.class)
.isEqualTo(student);
}
@Test
public void test4() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
Flux<Student> students = webTestClient.get()
.uri("/api/students")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk()
.returnResult(Student.class)
.getResponseBody();
StepVerifier.create(students.log())
.expectSubscription()
.expectNext(student)
.verifyComplete();
}
@Test
public void test5() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
webTestClient.get()
.uri("/api/students")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON)
.expectBodyList(Student.class)
.hasSize(1);
}
@Test
public void test6() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
EntityExchangeResult<List<Student>> result = webTestClient.get()
.uri("/api/students")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON)
.expectBodyList(Student.class)
.returnResult();
assertEquals(List.of(student), result.getResponseBody());
}
@Test
public void test7() {
Student student = new Student("TEST_ID", "TEST_NAME", 20);
BDDMockito.when(studentServiceMock.getStudents()).thenReturn(Flux.just(student));
webTestClient.get()
.uri("/api/students")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON)
.expectBodyList(Student.class)
.consumeWith((response) -> {
assertEquals(List.of(student), response.getResponseBody());
});
}
@Test
public void test8() {
BDDMockito.when(studentServiceMock.deleteStudent(ArgumentMatchers.anyString())).thenReturn(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)));
webTestClient.delete()
.uri("/api/students/{id}", "INVALID_ID")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isNotFound();
}
}
반응형
'Development > WebFlux' 카테고리의 다른 글
[WebFlux] Spring Data Reactive (0) | 2021.07.17 |
---|---|
[WebFlux] Stream API (0) | 2021.07.17 |
[WebFlux] WebClient (0) | 2021.07.17 |
[WebFlux] Controller (0) | 2021.07.17 |
[WebFlux] Introduction (0) | 2021.07.13 |