2015-09-30 68 views
0

我們有java測試類運行的硒測試。集成測試類的彈簧配置文件

在本地環境中一切正常,但我想在jenkins上運行時關閉這些測試。

於是我就用:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebIntegrationTest("server.port=1234") 
@Profile("!jenkins") 
@ActiveProfiles("integrationtests") 
public class LoginAndEditProfileSeleniumTest { 
... 

什麼工作: 運行mvn clean test運行所有測試本地,與integrationtests輪廓活躍。我不想傳遞任何額外的參數。

我想實現的: 運行mvn clean test -Dspring.profiles.active=jenkins關掉這個測試。

我可以以某種方式合併通過參數傳遞的配置文件,ActiveProfile註釋並將Profile註釋考慮在內? :)

//更新: 它可以使用類ActiveProfilesResolver擴展:

public class ActiveProfileResolver implements ActiveProfilesResolver { 
@Override 
public String[] resolve(Class<?> testClass) { 

    final String profileFromConsole = System.getProperty("spring.profiles.active"); 
    List<String> activeProfiles = new ArrayList<>(); 
    activeProfiles.add("integrationtests"); 
    if("jenkins".contains(profileFromConsole)){ 
     activeProfiles.add("jenkins"); 
    } 
    return activeProfiles.toArray(new String[activeProfiles.size()]); 
} 
} 

,但它似乎不與@profile反正合作(詹金斯輪廓活躍,但測試仍在運行)。

回答

2

@Profile對測試類的影響。因此,您應該簡單地刪除該註釋。

如果你想啓用一個測試類,只有當一個給定的系統屬性存在一個特定的值,你可以使用@IfProfileValue

然而,在您的情況,您要禁用測試類,如果給定的系統屬性存在一個特定的值(即,如果spring.profiles.active包含jenkins)。

而是實現自定義ActiveProfileResolver的,更優雅的解決方案是使用一個JUnit 假設導致整個測試類是忽略如果假設不成立。

這應該很好地爲你工作:

import static org.junit.Assume.*; 

// ... 

@BeforeClass 
public static void disableTestsOnCiServer() { 
    String profilesFromConsole = System.getProperty("spring.profiles.active", ""); 
    assumeFalse(profilesFromConsole.contains("jenkins")); 
} 

問候,

山姆

(春季TestContext框架 作者)