当前位置: 首页 > 知识库问答 >
问题:

Springboot集成测试:在bean初始化之前用pwd更新application.yml属性

巫马淳
2023-03-14

我已经编写了Springboot集成测试。src/test/资源中有一个application.yml。yml中有一个属性:

testFilePath:“projectBaseDirectoryPathVariable/src/test/resources/testFiles”

测试中使用的bean必须在bean(类)构造函数中读取这个值“testFilePath”。

就在执行集成测试之前,我希望能够用用户目录(或PWD路径)替换project BaseDirectoryPathAnalyable的值。因此,bean初始化具有正确的完整路径,即/user/usrname/项目/project_name/src/test/资源/testFiles

我尝试使用BeforeAll()方法,它将取代应用程序。yml文件内容,因此将projectBaseDirectoryPathVariable替换为完整路径。但是bean(类)只在调用其构造函数时使用旧值“projectBaseDirectoryPathVariable”。

怎么处理这个案子?

这是测试:

@Slf4j
@ActiveProfiles({"test", "master"})
@SpringBootTest
public class MyIntegrationTest {

    @Autowired
    ClassUsingApplicationYml classUsingApplicationYml;

    @BeforeAll
    static void beforeAll() throws IOException {
        //Some code
    }

    @Test
    void dummyClassTest() {
        // Some code
    }
}

ClassUSingApplication Yml/bean.

@Slf4j
@Component
public class ClassUsingApplicationYml implements Tasklet {

    public ClassUsingApplicationYml(@Value("${file.results}") String resultsDirectory) {
        //resultsDirectory should get "/users/usrname/projects/project_name/src/test/resources/testFiles", 
        //but it is getting "projectBaseDirectoryPathVariable/src/test/resources/testFiles"
        this.resultsDirectory = resultsDirectory;
    }

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws IOException {
        //Some code
        log.info(resultsDirectory);
        return RepeatStatus.FINISHED;
    }
}

应用yml

file
 results: "projectBaseDirectoryPathVariable/src/test/resources/testFiles"

共有1个答案

戚甫
2023-03-14

你可以稍微修改一下。

file
   property : projectBaseDirectoryPathVariable 
   results: ${file.property}/src/test/resources/testFiles

现在,用一个环境变量FILE_PROPERTY开始您的测试。这可以在@BeforeAll中通过System.setEnv(...)完成,然后在@AfterAll中用System.clear属性清除

 类似资料:
  • 与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的

  • 我有一个使用kotlin开发的spring-boot应用程序--总体来说一切都很顺利。(spring 1.5.6.发行版,kotlin 1.1.4-3) 我尝试过的一些addl方法:-确保我没有使用不推荐的TestRestTemplate-尝试使用setter注入而不是field注入,但这是浪费时间。-禁用kotlin编译器插件

  • null 代码构建良好,但当我运行它时,它会在下面抛出错误

  • 问题内容: 好像我遇到了本不应该出现的问题……但我想寻求帮助。 这里有一些我没有得到的解释。 具有两个简单的类,其中一个引用另一个,如下所示; 我收到注释的编译错误。有人可以告诉我该怎么办吗? 非常感谢任何好人的帮助! 问题答案: 正如 vadian 正确指出的 那样, 您应该在以下情况下创建一个: 您不能为 依赖 于另一个实例属性的存储属性提供默认值。