gpt4 book ai didi

java - Spring Boot 与 @PostConstruct 的集成测试取决于 @Before 部分

转载 作者:行者123 更新时间:2023-11-30 05:31:09 27 4
gpt4 key购买 nike

我为 SpringBoot 应用程序编写集成测试,有机会同时运行多个测试,它们具有文件系统依赖性,这就是为什么我需要为每个集成测试创建唯一的根文件夹。

我在生产应用程序中有一个 spring bean,它有 @PostConstruct部分执行长时间运行的操作。这些长时间运行的操作依赖于我在@Before中准备的文件系统结构。单元测试部分。

用于同时运行测试的唯一文件夹通过 root.directory=target/results/#{T(java.util.UUID).randomUUID().toString()} 设置。该属性被注入(inject)为 @Value Spring @Component类以避免在不同地方重新计算根目录。

主要问题如下:我需要准备文件夹,其名称应通过application.properties指定。在@Before test-section 中添加一些资源(复制文件、文件夹)并运行 @PostConstruct只有在所有资源都准备好之后。

我尝试了几种变体:1)在测试中使用 @PostConstruct Autowiring bean并在 @Before 末尾以编程方式调用它- 这是一个单一的工作案例,看起来很奇怪而且脆弱2) 替换@PostConstructInitializingBeanafterPropertiesSet - 它不起作用。因为我在 bean 初始化阶段有一个文件夹名称值,但没有复制在 @Before 中复制的资源。测试部分

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

最佳答案

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

The main issue is following: I need to prepare folders which name should be specified via application.properties with some resources(copy files, folders) in @Before test-section and run @PostConstruct only after all resource are prepared.

  1. 确保您正在运行测试
@RunWith(SpringRunner.class)
@SpringBootTest(properties = "myFileName=test.txt")
  • 在测试中@Before使用
  • @Rule 
    public final TemporaryFolder temporaryFolder = new TemporaryFolder();
    temporayFolder.newFile( use @Value here)
  • 因此 @Before 将在任何 Spring Boot 启动之前运行,然后在单元测试方法之一中调用您的函数
  • 关于java - Spring Boot 与 @PostConstruct 的集成测试取决于 @Before 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57525107/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com