Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从TestExecutionListener向ApplicationContext添加属性_Java_Spring_Spring Test - Fatal编程技术网

Java 从TestExecutionListener向ApplicationContext添加属性

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

我正在为我的Spring Boot(1.3.1)应用程序设置集成测试。在上下文启动时,我的应用程序从数据目录读取其状态,该目录在生产环境中由application.properties提供:

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方法。