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