Introduce soft assertions for WebTestClient
It happens very often that WebTestClient is used in heavyweight
integration tests, and it's a hindrance to developer productivity to
fix one failed assertion after another. Soft assertions help a lot by
checking all conditions at once even if one of them fails.
This commit introduces a new expectAllSoftly(..) method in
WebTestClient to address this issue.
client.get().uri("/hello")
.exchange()
.expectAllSoftly(
spec -> spec.expectStatus().isOk(),
spec -> spec.expectBody(String.class).isEqualTo("Hello, World")
);
Closes gh-26969
This commit is contained in:
committed by
Sam Brannen
parent
dd9b99e13d
commit
25dca40413
@@ -21,6 +21,7 @@ import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@@ -507,6 +508,24 @@ class DefaultWebTestClient implements WebTestClient {
|
||||
Flux<T> body = this.response.bodyToFlux(elementTypeRef);
|
||||
return new FluxExchangeResult<>(this.exchangeResult, body);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseSpec expectAllSoftly(ResponseSpecMatcher... asserts) {
|
||||
List<String> failedMessages = new ArrayList<>();
|
||||
for (int i = 0; i < asserts.length; i++) {
|
||||
ResponseSpecMatcher anAssert = asserts[i];
|
||||
try {
|
||||
anAssert.accept(this);
|
||||
}
|
||||
catch (AssertionError assertionException) {
|
||||
failedMessages.add("[" + i + "] " + assertionException.getMessage());
|
||||
}
|
||||
}
|
||||
if (!failedMessages.isEmpty()) {
|
||||
throw new AssertionError(String.join("\n", failedMessages));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -845,6 +845,11 @@ public interface WebTestClient {
|
||||
* about a target type with generics.
|
||||
*/
|
||||
<T> FluxExchangeResult<T> returnResult(ParameterizedTypeReference<T> elementTypeRef);
|
||||
|
||||
/**
|
||||
* Array of assertions to test together a.k.a. soft assertions.
|
||||
*/
|
||||
ResponseSpec expectAllSoftly(ResponseSpecMatcher... asserts);
|
||||
}
|
||||
|
||||
|
||||
@@ -1006,4 +1011,5 @@ public interface WebTestClient {
|
||||
EntityExchangeResult<byte[]> returnResult();
|
||||
}
|
||||
|
||||
interface ResponseSpecMatcher extends Consumer<ResponseSpec> {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user