recently I changed my spring boot properties to define a management port. In doing so, my unit tests started to fail :(
I wrote a unit test that tested the /
Had the same issue, you just have to make the management.port null by adding this in your application-test.properties (set it to empty value)
management.port=
Make sure you use the test profile in your JUnit by annotating the class with
@ActiveProfiles("test")
Try using
@SpringBootTest(properties = {"management.port="})
Properties defined in the @SpringBootTest annotation have a higher precedence than those in application properties. "management.port=" will "unset" the management.port property.
This way you don't have to worry about configuring the port in your tests.
Did you try adding the following annotation to your test class?
@TestPropertySource(properties = {"management.port=0"})
Check the following link for reference.
Isn't there an error in the property name?
Shouldn't be
@TestPropertySource(properties = {"management.server.port=..."}) instead of @TestPropertySource(properties = {"management.port=.."})
For Spring Boot 2.x the integration tests configuration could be simplified.
For example simple custom heartbeat endpoint
@Component
@Endpoint(id = "heartbeat")
public class HeartbeatEndpoint {
@ReadOperation
public String heartbeat() {
return "";
}
}
Where integration test for this endpoint
@SpringBootTest(
classes = HeartbeatEndpointTest.Config.class,
properties = {
"management.endpoint.heartbeat.enabled=true",
"management.endpoints.web.exposure.include=heartbeat"
})
@AutoConfigureMockMvc
@EnableAutoConfiguration
class HeartbeatEndpointTest {
private static final String ENDPOINT_PATH = "/actuator/heartbeat";
@Autowired
private MockMvc mockMvc;
@Test
void testHeartbeat() throws Exception {
mockMvc
.perform(get(ENDPOINT_PATH))
.andExpect(status().isOk())
.andExpect(content().string(""));
}
@Configuration
@Import(ProcessorTestConfig.class)
static class Config {
@Bean
public HeartbeatEndpoint heartbeatEndpoint() {
return new HeartbeatEndpoint();
}
}
}
For Spring boot test we need to specify the port it needs to connect to.
By default, it connects to server.port which in case of actuators is different.
This can be done by
@SpringBootTest(properties = "server.port=8090")
in application.properties we specify the management port as below
...
management.port=8090
...