List of Spring Boot Starter Dependencies

[Index of Spring blogs]

Core:

Lees meer »

Testing the Spring MVC layer

[Index of Spring blogs]

Use “spring-boot-starter-test” to add all dependencies:

    org.springframework.boot
    spring-boot-starter-test
    test

You can annotate the test class with :

  • (nothing)
  • @SpringBootTest(webEnvironment = MOCK / RANDOM_PORT / DEFINED_PORT)
  • @AutoConfigureMockMvc
  • @WebMvcTest

To make rest call’s to the controllers, you can use one of the following:

  • RestTemplate
  • TestRestTemplate
  • RestAssuredMockMvc
  • MockMvc
  • WebTestClient (only when using webflux)

@SpringBootTest will load your complete Spring application, but without the Servlet container when specifying (webEnvironment = MOCK).
When using webEnvironment = RANDOM_PORT, a random port is used (which you can find in the test using @LocalServerPort).
It is also possible to autowire a TestRestTemplate, RestAssuredMockMvc or MockMvc which you can use to test the application using relative url’s.

@MockBean can be used to mock any bean in the application environment.

To test the serialization and deserialization of a JSON object, you can use @JsonTest

To test a web client, you can use @RestClientTest

Examples of using the different annotations and rest clients can be found below:

Lees meer »

Spring WebFlux samples and links

[Index of Spring blogs]

Samples:
https://github.com/robbertvdzon/springfluxsamples/blob/master/src/main/java/com/example/springwebflux/SpringwebfluxApplication.java

Spring5 documentation about webFlux:
https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux

Spring Boot documentation about webFlux:
https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-webflux

Spring testing documentation about Spring Web Reactive:
https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#mock-objects-web-reactive

 

Spring WebMVC samples and links

[Index of Spring blogs]

Samples:
https://github.com/robbertvdzon/spring-web-mvc-samples/blob/master/src/main/java/com/example/demo/DemoApplication.java

Spring5 documentation about webMVC:
https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html

Spring Boot documentation about webMVC:
https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-developing-web-applications

Spring testing documentation about MVC Test Framework:
https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-mvc-test-framework

 

Unittesting: using AssertJ’s assertThat

JUnit4 provides a standard dependency to the Hamcrest Assertion Frameworks which makes the following assertions possible:

assertThat("Robbert",equalTo("Robbert"));

Many matchers beside equalTo are available, but the problem to me is that I always have search for the appropriate one that I want to use, and static import that matcher.

An alternative to Hamcrest, is AssertJ which provides a fluent interface for the assertions, so you can use your IDE’s code completion for searching the matchers.

AssertJ uses the following syntax:

assertThat("Robbert").isEqualTo("Robbert");

With AssertJ, it is also possible to use soft assertions which makes is possible to do multiple checks, and test all of them instead of stopping the test on the first failure.

SoftAssertions softly = new SoftAssertions();
softly.assertThat("Robert").isEqualTo("Robbert");
softly.assertThat("vd").isEqualTo("vd");
softly.assertThat("Zon").isEqualTo("Son");
softly.assertAll();

This results in the following error:

The following 2 assertions failed:
1) expected:<"Rob[b]ert"> but was:<"Rob[]ert">
at MyTest.test(MyTest.java:11) expected:<"Rob[b]ert"> but was:<"Rob[]ert">
2) expected:<"[S]on"> but was:<"[Z]on">
at MyTest.test(MyTest.java:13) expected:<"[S]on"> but was:<"[Z]on">

More about AssertJ can be found here:http://joel-costigliola.github.io/assertj/

To add a dependency to AssertJ, use the following:

testCompile("org.assertj:assertj-core:3.11.1")

or

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.11.1</version>
    <scope>test</scope>
</dependency>