Jov*_*cic 4 java spring integration-testing gradle
我正在为 SpringBoot 应用程序编写测试。\n我想将集成测试与单元测试分开。\n现在我的项目结构如下所示:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Demo\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main\n| | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80java\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test\n| | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80java\nRun Code Online (Sandbox Code Playgroud)\n\n有没有办法添加这样的模块:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Demo\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main\n| | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80java\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 integrationTest\n| | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80java\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test\n| | | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80java\nRun Code Online (Sandbox Code Playgroud)\n\n我希望新的集成测试模块的行为与测试模块相同,但我不知道如何配置它。我设法将其添加为模块,将integrationTest/java dir标记为测试源根并在其中运行测试,但@SpringBootTest无法解析ApplicationContext,并且我的所有bean始终为空。
\n\n当我在测试模块中编写相同的测试时,它工作正常。
\n\n有没有办法做到这一点?\n这是分离集成测试的正确方法吗?\n如果不是,最佳实践是什么?
\n\n我在 intelliJ 工作,我使用 gradle 作为包管理器。
\n您可以将它们与其余测试一起进行;应用约定和标记匹配来过滤掉它们,例如附加IntegrationTest到类名并为 JUnit 使用相同的值@Tag...然后只需定义/声明一些 Gradle 任务来执行它们:
test {
useJUnitPlatform()
}
task integrationTests(type: Test) {
filter { includes = ["IntegrationTest"] }
useJUnitPlatform()
}
task unitTests(type: Test) {
filter { includes = ["UnitTest"] }
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
完整示例:
test {
useJUnitPlatform()
}
task integrationTests(type: Test) {
filter { includes = ["IntegrationTest"] }
useJUnitPlatform()
}
task unitTests(type: Test) {
filter { includes = ["UnitTest"] }
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
package tld.domain.support;
public final class Category {
public static final INTEGRATION_TEST = "IntegrationTest";
public static final UNIT_TEST = "UnitTest";
}
Run Code Online (Sandbox Code Playgroud)