必要に応じて、Spring コンテキスト内でテストを実行し、Spring 構成クラス内で必要なプロパティを設定できます。JUnit を使用する場合は、SpringJUnit4ClassRunner を使用し、次のようにテスト専用の構成クラスを定義します。
テスト中のクラス:
@Component
public SomeClass {
@Autowired
private SomeDependency someDependency;
@Value("${someProperty}")
private String someProperty;
}
テストクラス:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SomeClassTestsConfig.class)
public class SomeClassTests {
@Autowired
private SomeClass someClass;
@Autowired
private SomeDependency someDependency;
@Before
public void setup() {
Mockito.reset(someDependency);
@Test
public void someTest() { ... }
}
そして、このテストの構成クラス:
@Configuration
public class SomeClassTestsConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer properties() throws Exception {
final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
Properties properties = new Properties();
properties.setProperty("someProperty", "testValue");
pspc.setProperties(properties);
return pspc;
}
@Bean
public SomeClass getSomeClass() {
return new SomeClass();
}
@Bean
public SomeDependency getSomeDependency() {
// Mockito used here for mocking dependency
return Mockito.mock(SomeDependency.class);
}
}
そうは言っても、このアプローチはお勧めしません。参考のためにここに追加しました。私の意見では、Mockito ランナーを使用する方がはるかに良い方法です。その場合、Spring 内でテストをまったく実行しません。これは、はるかに明確で単純です。