2017-08-12 111 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

相關問題