我已经编写了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"
你可以稍微修改一下。
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 正确指出的 那样, 您应该在以下情况下创建一个: 您不能为 依赖 于另一个实例属性的存储属性提供默认值。