【发布时间】:2016-12-18 12:03:08
【问题描述】:
我有一个 Spring Boot 应用程序。我正在编写 Junit 测试。 我正在尝试从 application.properties(在 src/main/resources/application.properties 中定义)和在 AppConfig(src/main/java/hello/AppConfig.java)中配置的 Status bean 注入值。我看到 bean 是自动装配的(通过调试器它不为空)但未设置值。
这里是 application.properties
src/main/resources/application.properties
app.name=rest-service
app.version=1.0.0-SNAPSHOT
src/main/java/hello/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);
}
}
//Status 是一个简单的 pojo,带有 name 和 version 字段
src/test/java/hello/GreetingControllerTests.java
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@ContextConfiguration(classes={hello.TestConfig.class,hello.AppConfig.class})
@WebAppConfiguration
public class GreetingControllerTests {
@Autowired
Environment envi;
@Autowired
Status status;
@Value("${app.name:notConfigured}")
String appName;
private String env;
@Before
public void init(){
System.out.println(status.getName());
System.out.println(appName);
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();
}
}
}
我在 init 方法中设置了调试器,发现 appName 和 status 设置了正确值的 bean 都没有被注入。虽然注入了状态 bean。只是没有设置值。
【问题讨论】:
-
你的
Application类是什么样的? -
您在 application.properties 中有一个未放置的字符。
app.version没有= -
@ShawnClark:修复没有帮助。你可以在这里查看代码。 bitbucket.org/SpringDevSeattle/gs-rest-service
标签: spring spring-boot spring-test springjunit4classrunner