2015-11-14 102 views
8

我正在開發一個使用帶有Gradle插件的STS的Spring Boot應用程序。 我有不同的測試配置,以防止我們的Selenium測試不得不登錄。通過Eclipse運行Spring Boot應用程序拾取測試類

所以在src/test/java/etc我有這樣的事情:

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
@EnableWebSecurity 
public static class SecurityConfig extends WebSecurityConfigurerAdapter 
{ 
    @Override 
    protected void configure(HttpSecurity http) throws Exception 
    { 
     http.authorizeRequests().anyRequest().permitAll(); 
    } 
} 

而在src/main/java我有一個配置登錄等,要求對所有的網頁登錄的等價類。

如果我通過Gradle插件(bootRun)運行應用程序,一切工作正常。但是,如果我通過Eclipse直接運行或調試它(例如,右鍵單擊項目,Run As-> Spring Boot App或在彈出窗口或Java視圖中單擊運行/調試按鈕),則測試配置被應用,所以訪問被授予所有沒有登錄的頁面。

我猜測,當我以這種方式啓動應用程序時,測試類將被包含在類路徑中。 有沒有簡單的方法來防止這種情況發生?

+1

我可以想象你可以通過向此類添加@Profile(「test」)來解決此問題+ @ActiveProfiles(「test 「)'在測試中。這將會使該bean在這個配置文件中成爲condtional。請參閱http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-ctx-management-env-profiles – zapl

+0

看起來像一個很好的潛在解決方案,儘管甚至在我將@profile(「test」)添加到測試配置類之後,在我運行應用程序時它仍在使用。我稍後會進一步調查 - 謝謝。 –

+2

我可以確認問題幾乎可以肯定,運行時類路徑包括'測試'的東西。這是一個已知的問題,雖然我不認爲它有一個問題票。這是由於gradle的工具模型沒有在'test'和'runtime'類路徑之間區分引起的問題。恐怕最簡單的方法來避免這個問題是切換到使用maven。我知道m2e/maven正確地做到了這一點。 – Kris

回答

2

當您從eclipse運行測試時,類路徑通過eclipse(而不是maven或gradle)準備。

Eclipse僅爲每個項目使用一個類路徑,並且不知道任何有關依賴範圍的內容(如'compile'或'test')。 因此,類路徑始終包含引用項目的任何資源。

你不能改變這種eclipse的行爲。 您需要使用命名約定,配置文件等,以避免意外使用測試資源。

0

你可以附加@TestComponent給你測試配置類。在應用程序的組件掃描期間,這些bean配置將被跳過。根據組件掃描配置,您需要定義一個@ComponentScan排除過濾器: excludeFilters = @ComponentScan.Filter(value = TestComponent.class, type = FilterType.ANNOTATION))

+0

它可行,但這種方法存在一個問題:您必須在生產環境中添加彈簧測試類,否則您將得到ClassNotFoundException –

+0

@WellingtonSouza。或者,您也可以使用正則表達式排除測試類,例如'excludeFilters = @ ComponentScan.Filter(pattern =「。* TestConfiguration」,type = FilterType.REGEX)' – StefanR

相關問題