2017-08-12 75 views
0

我使用Spock Framework和Groovy脚本来测试我的Java应用程序。在我创建的所有课程中,我的项目中有100%的测试覆盖率。但是,我注意到覆盖范围显示名为“App”的主类未完全测试。Spock Framework如何测试Spring引导应用程序的上下文

这里是我的App类启动Spring应用程序:

package com.test.cli; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.ConfigurableApplicationContext; 

@SpringBootApplication 
public class App { 
    public static void main(String[] args) { 
    ConfigurableApplicationContext context = SpringApplication.run(App.class, args); 

    App app = context.getBean(App.class); 
    app.start(); 
    } 

    private void start() { 
    System.out.print("App started ..."); 
    } 

} 

这是一个测试,我对App类:

package com.test.cli 

import com.test.cli.App 
import org.springframework.beans.factory.annotation.Autowired 
import org.springframework.boot.test.context.SpringBootTest 
import org.springframework.context.ApplicationContext 
import spock.lang.Specification 


@SpringBootTest(classes = App.class) 
class AppSpecIT extends Specification { 

    @Autowired 
    ApplicationContext context 

    def "it should boot Spring application successfully"() { 
    expect: "application context exists" 
    context != null 
    } 

} 

您可以在这张截图看到,专线12至18不包括在内,我想解决这个问题:App Test coverage result

如何使用Spock Framework完全测试Spring Boot应用程序上下文?

回答

1

@SpringBootTest只能实例化用@SpringBootApplication注解的类或通过classes显式配置的任何其他配置类。但静态main方法未执行,并且无论如何应该只包含胶水代码SpringApplication.run(App.class, args)。如果你想测试它,那么你将不得不明确地称它,但我建议反对它,你可以阅读关于为什么在这里The tragedy of 100% code coverage

如果您需要启动方法之后要调用的启动方法,请改为使用org.springframework.boot.ApplicationRunnerorg.springframework.boot.CommandLineRunner

相关问题