【问题标题】:How to JUnit Test Spring-Boot's Application.java如何 JUnit 测试 Spring-Boot 的 Application.java
【发布时间】:2017-06-06 02:54:23
【问题描述】:

道歉,因为这似乎是一个无用的行为,但是我们有什么办法可以在 Spring-Boot(1.3.8.RELEASE) 的 Application.java 上实际进行 junit 测试,这个类除了启动一个Spring-boot 应用程序?

如下:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {

       try{
             SpringApplication.run(Application.class, args);
       }catch(Exception e){
             //code here
       }   
    }
}

也许我可以尝试捕获异常?但是我还能测试什么以便 JUnit 测试 SpringApplication.run()?任何例子都值得赞赏。谢谢大家!

【问题讨论】:

    标签: java spring-boot junit


    【解决方案1】:

    通常,以下内容足以测试应用程序上下文是否启动。

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class)
    public class ApplicationTests {
    
        @Test
        public void contextLoads() {
        }
    }
    

    不过,如果你想直接测试Application.main,你也可以这样测试:

    public class ApplicationTest {
    
        @Test
        public void test()
        {
            Application.main(new String[]{
                    "--spring.main.web-environment=false",
                    "--spring.autoconfigure.exclude=blahblahblah",
                    // Override any other environment properties according to your needs
            });
        }
    }
    

    【讨论】:

    • 这正是声纳测试的内容...非常感谢,我希望更多的人会看到这个结果!
    • 如果我没记错的话,如果只有一个带有@SpringBootApplication 的类,那么这个类将被采用,不需要进一步声明。否则测试无法知道 SpringBootApplication 启动。
    【解决方案2】:

    也许我可以尝试捕获异常?但我还能测试什么 以便 JUnit 测试 SpringApplication.run()?任何例子都是 赞赏。谢谢大家!

    如果捕获到异常则使测试失败在这里是无助的,因为在测试期间抛出的异常已经导致测试失败(更准确地说是错误)。
    如果您已经执行了加载整个 Spring Boot 上下文 (@SpringBootTest) 的测试类,则无需编写测试来检查它是否已正确加载。

    你应该测试Application 类是否有一些逻辑。
    例如,您可以声明一个使用@Before 注释的方法,该方法在加载上下文后进行一些处理,并且您希望断言处理已按应有的方式完成。其他示例:您可以在 main() 方法中传递一些参数,并且您希望断言该方法按预期使用了这些参数。
    所有这些都可以使用@SpringBootTest 进行测试。

    如果你的 Application 班级除了:

     public static void main(String[] args) {                   
       SpringApplication.run(Application.class, args);         
     }
    

    但是您需要同样覆盖main() 测试方法以符合某些覆盖工具或组织,为此创建一个集成测试,清楚地记录它并让集成持续进行,因为加载 Spring Boot 应用程序需要时间。可以参考这个question

    【讨论】:

      猜你喜欢
      • 2019-10-26
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2020-07-27
      • 2018-02-23
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多