Further simplification: using the real WebClient with an ExchangeFunction
[demos/testing] / src / test / java / de / juplo / demo / RemoteContentServiceTest.java
index 60d1c5d..cf2f035 100644 (file)
@@ -1,18 +1,17 @@
 package de.juplo.demo;
 
 
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.web.reactive.function.client.ClientResponse;
+import org.springframework.web.reactive.function.client.ExchangeFunction;
 import org.springframework.web.reactive.function.client.WebClient;
-import org.springframework.web.reactive.function.client.WebClient.RequestHeadersUriSpec;
-import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
 import reactor.core.publisher.Mono;
-import reactor.test.StepVerifier;
 
 
 /**
@@ -25,33 +24,31 @@ public class RemoteContentServiceTest
   RemoteContentService service;
 
   @MockBean
-  WebClient webClient;
+  ExchangeFunction exchangeFunction;
   @MockBean
-  RequestHeadersUriSpec uriSpec;
-  @MockBean
-  ResponseSpec responseSpec;
+  ClientResponse clientResponse;
 
 
   @BeforeEach
   void setUp()
   {
-    service = new RemoteContentService(webClient);
+    service =
+        new RemoteContentService(
+            WebClient
+                .builder()
+                .exchangeFunction(request -> Mono.just(clientResponse))
+                .build());
   }
 
 
   @Test
   void test()
   {
-    when(webClient.get()).thenReturn(uriSpec);
-    when(uriSpec.uri(eq("/foo"))).thenReturn(uriSpec);
-    when(uriSpec.retrieve()).thenReturn(responseSpec);
-    when(responseSpec.bodyToMono(String.class)).thenReturn(Mono.just("bar"));
+    Mono<String> mono = Mono.just("bar");
+    when(clientResponse.bodyToMono(String.class)).thenReturn(mono);
 
     Mono<String> result = service.getRemoteText("/foo");
 
-    StepVerifier
-        .create(result)
-        .expectNext("bar")
-        .verifyComplete();
+    assertThat(result.block()).isEqualTo("bar");
   }
 }