Unit testing of Spring Boot Actuator endpoints not working when specifying a port

前端 未结 6 1878
忘了有多久
忘了有多久 2021-01-04 06:43

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 /

相关标签:
6条回答
  • 2021-01-04 07:12

    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")
    
    0 讨论(0)
  • 2021-01-04 07:21

    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.

    0 讨论(0)
  • 2021-01-04 07:22

    Did you try adding the following annotation to your test class?

    @TestPropertySource(properties = {"management.port=0"})
    

    Check the following link for reference.

    0 讨论(0)
  • 2021-01-04 07:22

    Isn't there an error in the property name? Shouldn't be @TestPropertySource(properties = {"management.server.port=..."}) instead of @TestPropertySource(properties = {"management.port=.."})

    0 讨论(0)
  • 2021-01-04 07:26

    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();
            }
    
        }
    
    }    
    
    0 讨论(0)
  • 2021-01-04 07:36

    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
    ...
    
    0 讨论(0)
提交回复
热议问题