【发布时间】:2019-08-16 12:58:16
【问题描述】:
我为 SpringBoot 应用程序编写集成测试,有机会同时运行多个测试,它们具有文件系统依赖项,这就是为什么我需要为每个集成测试创建唯一的根文件夹。
我在生产应用程序中有一个 spring bean,它有 @PostConstruct 部分来执行长时间运行的操作。这些长时间运行的操作依赖于我在单元测试的@Before 部分准备的文件系统结构。
通过root.directory=target/results/#{T(java.util.UUID).randomUUID().toString()} 设置同时运行测试的唯一文件夹。该属性在spring@Component类中注入为@Value,避免异地重新计算根目录。
主要问题如下:我需要在@Before 测试部分准备应通过application.properties 指定名称的文件夹以及@Before 测试部分中的一些资源(复制文件、文件夹),并仅在准备好所有资源后运行@PostConstruct。
我尝试了几种变体:1) 在测试中使用 @PostConstruct 自动装配一个 bean,并在 @Before 末尾以编程方式调用它 - 这是一个单独的工作案例,它看起来既奇怪又脆弱
2) 用InitializingBean 和afterPropertiesSet 替换@PostConstruct - 它不起作用。因为我在 bean 初始化阶段有一个文件夹名称的值,但没有我在 @Before 测试部分复制的复制资源
我希望我解释得很好。如有任何帮助或建议,我将不胜感激。
【问题讨论】:
-
您的意思是,您的
@PostConstruct在@Before完成之前运行?据我了解,您所需要的只是保证@Before内的事先执行。 -
抱歉,在 spring 上下文初始化时调用了添加 cmets
@PostConstruct是我的错。@Before追赶它
标签: java spring spring-boot spring-boot-test