'Idiomatic way of configuring integration tests in spring

What is the idiomatic (and easiest) way of configuring integration tests in Spring?

For example let's define a sample integration test:

@ActiveProfiles("dev", "test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class SampleTest() {

  @LocalServerPort
  lateinit var port: Number

  lateinit var client: WebTestClient

  @BeforeEach
  fun setup() {
    client = WebTestClient.bindToServer().baseUrl("http://localhost:$port").build()
  }

  @Test
  fun test() {
    client.get()
      .uri("/api/something")
      .exchange()
      .expectStatus().is2xxSuccessful
      .expectBody()
  }
}

There are many ways i can configure WebTestClient but I don't know which one is "the best". To name a few:

  • lateinit var and BeforeEach
  • configure in each test separately

Given my project's structure and conventions most of things we get from DI is injected via constructor using @Autowired annotation. Is it also possible in this case? Therefore i'd just do:

@ActiveProfiles("dev", "test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class SampleTest(
 @Autowired val client: WebTestClient
) {
  @Test
  fun test() {
    client.get()
      .uri("/api/something")
      .exchange()
      .expectStatus().is2xxSuccessful
      .expectBody()
  }
}

I've tried to do it without other modifications and some of my tests fail because of connection refused



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source