我有一个弹簧启动应用程序。我正在编写 Junit 测试。我正在尝试从 application.properties(在 src/main/resources/application.properties 中定义)和 AppConfig 中配置的 Status bean(src/main/java/hello/AppConfig.java)注入值。我看到 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 方法中设置了调试器,发现设置了正确值的 beanappName
和bean 都没有被注入。status
虽然注入了状态 bean。只是没有设置值。