单元测试 Spring 启动应用程序端点

Unit testing Spring Boot application endpoints

我有一个小型 Spring 启动应用程序,在“/health”处定义了一个健康端点。这是在代码中定义的:

@Component
public class MyHealthEndpoint implements HealthIndicator {
  public Health health() {
    # ...
    # returns health info as JSON here 
    # ...
  }
}

因此,当 运行 使应用程序访问 localhost/health returns 处的端点时,一些应用程序运行状况信息。

我的问题是:最好的测试方法是什么?

我想对 MyHealthEndpoint class 进行单元测试,我已经尝试在我的测试 class 中使用 @Autowired 对其进行实例化,但这不起作用。 还尝试在测试 class 和

中实例化它
MyHealthEndpoint testHealthEndpoint = new MyHealthEndpoint();

但这只是 returns 一个没有健康信息的空新 class,所以显然 Spring Boot 中的依赖项 injection/IOC 没有注册它,或者我我只是 Spring 的新手,不知道如何正确操作。

是 运行 集成测试的唯一解决方案,方法是启动应用程序并 运行 直接对端点进行测试 http GET 调用,然后声明返回的 JSON 或者执行你有更好的想法吗?

您应该使用 Sprint 测试上下文框架 检查这个: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/testing.html#integration-testing-annotations

您可以在此处找到该库:https://mvnrepository.com/artifact/org.springframework/spring-test

您应该使用@ContextConfiguration 注释测试classes(或父class)并且您可以设置您的配置xml(位置参数)和配置Java classes(classes参数) 如果你使用 SpringMVC,也添加 @WebAppConfiguration 注解

如果已配置,您可以在测试中使用@Autowired。