我有一個彈簧引導gradle應用程序。當我運行gradle構建時,我想針對不同的環境運行。系統屬性-Dspring.profiles.active不可用在彈簧啓動測試配置在gradle build
例如:./gradlew clean build -Dapp.env=QA1
。在測試代碼中,我想檢查這個屬性並相應地收集測試數據。我觀察到的是屬性(app.env)不可用。
由於測試檢查系統屬性,構建應該失敗。但構建是成功的。我也沒有在控制檯中看到println語句。
,如果你想克隆回購:
混帳克隆https://[email protected]/SpringDevSeattle/gs-rest-service.git
這裏是我的測試代碼:
的src /測試/ JAVA /你好/ GreetingControllerTests.java
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@ContextConfiguration(classes={hello.TestConfig.class,hello.AppConfig.class})
@WebAppConfiguration
public class GreetingControllerTests {
@Autowired
TestEnv testEnv;
@Autowired
Status status;
private String env;
@Before
public void init(){
System.out.println(status.getName());
env=testEnv.getEnv();
}
@Test
public void should_fail(){
if (env.equalsIgnoreCase("DEV")){
assertThat(false).isFalse();
}
if (env.equalsIgnoreCase("QA1")){
System.out.println("failing the test");
fail();
}
}
}
src/test/java/hello/TestConfig.java
@Configuration
public class TestConfig {
@Bean
public TestEnv testEnv(){
Properties properties = System.getProperties();
String env = properties.getProperty("app.env");
System.out.println(env);
if (env==null){
env="dev";
}
return new TestEnv(env);
}
}
的src /測試/ JAVA /你好/ TestEnv.java
public class TestEnv {
private String env;
public TestEnv(String env){
this.env=env;
}
public String getEnv() {
return env;
}
public void setEnv(String env) {
this.env = env;
}
}
的src /主/ JAVA /你好/ AppConfig.java
@Configuration
public class AppConfig {
@Value("${app.version}")
private String version;
@Value("${app.name}")
private String name;
@Bean
public Status status(){
return new Status(name,version);
}
}
我的最終目標是爲基於-Dapp.env
的測試設置「spring.profiles.active」。但我目前沒有看到gradle運行中拾取的系統屬性。
編輯
即使./gradlew clean build -Dspring.profiles.active=QA1
,我沒有看到它的工作。
測試相應地改變了這一點。
@Autowired
Environment envi
@Before
public void init(){
System.out.println("*********-IN THE INIT METHOD **********"); //new line added
System.out.println(status.getName());
env=envi.getActiveProfiles()[0];
}
@Test
public void should_fail(){
if (env.equalsIgnoreCase("DEV")){
assertThat(false).isFalse();
}
if (env.equalsIgnoreCase("QA1")){
System.out.println("failing the test");
fail();
}
}
生成失敗在任一情況下-Dspring.profiles.active=DEV
或-Dspring.profiles.active=QA1
是的,在我的build.gradle中添加這個之後,我看到預期的行爲。但我沒有看到在控制檯上看到println。任何想法爲什麼? '的System.out。println(「未通過測試」);'在方法'should_fail'中?謝謝 –
你可以在init()方法中看到添加了一個打印語句'System.out.println(「********* - IN INIT METHOD **********」)'。這應該始終執行。但我沒有在控制檯中看到。這些線在哪裏進行gradle構建? –
您應該能夠在位於build/reports/tests/test/index.html中的測試報告中看到這一點。 –