私はスプリングブートアプリケーションを持っています。Junit テストを書いています。application.properties (src/main/resources/application.properties で定義) と AppConfig で構成された Status Bean (src/main/java/hello/AppConfig.java) から値を注入しようとしています。Bean が自動配線されていることがわかります (デバッガーを介して null ではありません) が、値が設定されていません。
これがapplication.propertiesです
src/main/resources/application.property s
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);
}
}
//ステータスは、名前とバージョンのフィールドを持つ単純な pojo です
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 は注入されます。値が設定されていないだけです。