指定端口时弹簧启动执行器端点不起作用的单元测试

最近,我更改了弹簧启动属性以定义管理端口。在这样做的过程中,我的单元测试开始失败:(

我编写了一个单元测试,测试了 /metrics 终结点,如下所示:

@RunWith (SpringRunner.class)
@DirtiesContext
@SpringBootTest
public class MetricsTest {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mvc;

    /**
     * Called before each test.
     */
    @Before
    public void setUp() {
        this.context.getBean(MetricsEndpoint.class).setEnabled(true);
        this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build();
    }

    /**
     * Test for home page.
     *
     * @throws Exception On failure.
     */
    @Test
    public void home()
            throws Exception {
        this.mvc.perform(MockMvcRequestBuilders.get("/metrics"))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }
}        

以前,这已经过去了。添加后:

management.port=9001

测试开始失败,如下所示:

home Failed: java.lang.AssertionError: Status expected: <200> but was: <404>

我尝试用以下方法更改@SpringBootTest注释:

@SpringBootTest (properties = {"management.port=<server.port>"})

其中 是用于服务器端口的编号。这似乎没有任何区别。

因此,随后将属性文件中的 management.port 值更改为与 server.port 相同。同样的结果。

使测试正常工作的唯一方法是从属性文件中删除 management.port。

任何建议/想法?

谢谢


答案 1

对于Spring启动测试,我们需要指定它需要连接到的端口。

默认情况下,它连接到执行器不同的情况下。server.port

这可以通过以下方式完成

@SpringBootTest(properties = "server.port=8090")

中,我们指定管理端口如下application.properties

...
management.server.port=8090
...

答案 2

您是否尝试过将以下注释添加到测试类中?

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

请查看以下链接以供参考


推荐