2つの異なるプラットフォームをチェックするために、JUnitを使用した統合テストにapplication.propertiesプロファイルを使用しようとしています。
両方のプラットフォームに共通の構成を含む基本構成ファイル_application.properties
_でこれを試してみました。さらに、各プラットフォームに固有のプロパティファイル_application-tensorflow.properties
_ _application-caffe.properties
_を追加しました。プラットフォーム構成ですが、JUnitでは、メインアプリケーションで使用していたアプローチとは動作が異なることがわかりました。
私のテスト構成クラスは次のようになります。
_@Configuration
@PropertySource("classpath:application.properties")
@CompileStatic
@EnableConfigurationProperties
class TestConfig {...}
_
私は@PropertySource("classpath:application.properties")
を使用しているので、基本的な構成を認識します。そこで、テンソルフローアプリケーションプロファイルを認識しますが、ファイルから読み取らないことを期待して、_spring.profiles.active=tensorflow
_も記述します。_/src/test/resources/application-tensorflow.properties
_、またはメインアプリの場合のように_/src/main/resources/application-tensorflow.properties
_から。
JUnitテストでスプリングプロファイルを指定する特別な方法はありますか?私がやろうとしていることを達成するためのベストプラクティスは何ですか?
まず、テストクラスに_@ActiveProfiles
_を追加して、アクティブなプロファイルを定義します。
また、構成ファイルをロードするように構成する必要があります。 2つのオプションがあります:
@ContextConfiguration(classes = TheConfiguration.class, initializers = ConfigFileApplicationContextInitializer.class)
を使用した単純な統合テスト@SpringBootTest
_を使用した完全なSpringBootテストテストクラスの例:
_@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({ "test" })
public class DummyTest {
@Autowired
private Environment env;
@Test
public void readProps() {
String value = env.getProperty("prop1") + " " + env.getProperty("prop2");
assertEquals("Hello World", value);
}
}
_
これで、ファイル_src/test/resources/application.properties
_および_src/test/resources/application-test.properties
_が評価されます。
テストに注釈を付けてみましたか
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = {"tensorflow"})
また、application-tensorflow.propertiesが/ src/test/resourcesの下にあることを確認してください