【问题标题】:Spring Boot integration test with @PostConstruct depends on @Before section使用 @PostConstruct 的 Spring Boot 集成测试依赖于 @Before 部分
【发布时间】: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) 用InitializingBeanafterPropertiesSet 替换@PostConstruct - 它不起作用。因为我在 bean 初始化阶段有一个文件夹名称的值,但没有我在 @Before 测试部分复制的复制资源

我希望我解释得很好。如有任何帮助或建议,我将不胜感激。

【问题讨论】:

  • 您的意思是,您的@PostConstruct@Before 完成之前运行?据我了解,您所需要的只是保证@Before内的事先执行。
  • 抱歉,在 spring 上下文初始化时调用了添加 cmets @PostConstruct 是我的错。 @Before 追赶它

标签: java spring spring-boot spring-boot-test


【解决方案1】:

您的问题有点模糊,但要回答问题。

主要问题如下:我需要在@Before test-section 中准备应通过application.properties 指定名称的文件夹以及@Before 测试部分中的一些资源(复制文件、文件夹),并仅在准备好所有资源后运行@PostConstruct .

  1. 确保您正在运行测试
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "myFileName=test.txt")
  1. 在测试中@Before 使用
@Rule 
public final TemporaryFolder temporaryFolder = new TemporaryFolder();
temporayFolder.newFile( use @Value here)
  1. 所以@Before 将在任何 Spring Boot 启动之前运行,然后在其中一种单元测试方法中调用您的函数

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 2018-11-24
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2020-02-25
    相关资源
    最近更新 更多