'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 |
|---|
