Java 从TestExecutionListener向ApplicationContext添加属性
我正在为我的Spring Boot(1.3.1)应用程序设置集成测试。在上下文启动时,我的应用程序从数据目录读取其状态,该目录在生产环境中由application.properties提供:Java 从TestExecutionListener向ApplicationContext添加属性,java,spring,spring-test,Java,Spring,Spring Test,我正在为我的Spring Boot(1.3.1)应用程序设置集成测试。在上下文启动时,我的应用程序从数据目录读取其状态,该目录在生产环境中由application.properties提供: datadir.location=<path to directory> TestExecutionListener如下所示: @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = M
datadir.location=<path to directory>
TestExecutionListener如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebIntegrationTest({"server.port=0", "management.port=0"})
@TestPropertySource(properties = {"datadir.location=<path to test data directory>"})
public class MyIntegrationTest {
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebIntegrationTest({"server.port=0", "management.port=0"})
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@TestExecutionListeners(listeners = {DataDirSetupListener.class}, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
public class MyIntegrationTest {
public void initDataDirectory(Path pathToDataDir) {
// Setup of contents in temporary data directory goes here
}
}
public class DataDirSetupListener extends AbstractTestExecutionListener {
public void beforeTestClass(TestContext testContext) {
Path tempDataDir = Files.createTempDirectory("datadir");
// This call asks testContext for the test class, and
// calls the initDataDirectory method
findAndCallInitDataDirectory(tempDataDir);
// TODO: Set datadir.location = tempDataDir.toString();
}
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
因此,侦听器运行良好,并在启动ApplicationContext之前创建数据目录,但向上下文提供数据目录位置的正确方法是什么
(如果将datadir设置移动到prepareTestInstance而不是beforeTestClass将有助于实现这一点,那很好。)您可以使用spring概要文件。所以,在测试中,运行概要文件测试并为每个概要文件定义不同的应用程序属性
application-{profile}.properties
查看第24.4节,我不确定如何将其应用于我的情况,因为在DataDirSetupListener中的代码运行之前,属性值是未知的。数据是如何填充到此DataDirSetupListener的?我更新了原始帖子。侦听器向TestContext请求当前测试类,并使用该上下文调用测试类中的initDataDirectory方法。