项目设置:Gradle5,Spring5
我们想使用 JUnit5 作为测试工具。我们从 Spring5 依赖项中排除了 JUnit4 ,但是我们有一个第三方库,该库仍然依赖 JUnit4 ,并且不允许将其排除。我们试图在全局范围内排除 JUnit4 ,但随后我们的项目无法编译。
目标:我们的目标是将 JUnit4 隐藏在编译依赖项中,以便开发人员无法使用 JUnit4 类代替 JUnit5 < / em>意外上课。
成绩:
dependencies {
implementation('org.springframework.boot:spring-boot-starter')
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'junit', module: 'junit'
}
testImplementation('org.testcontainers:testcontainers:1.10.2') {
exclude group: 'junit', module: 'junit'
}
testImplementation('org.testcontainers:postgresql:1.7.3') {
exclude group: 'junit', module: 'junit'
}
testImplementation('org.testcontainers:junit-jupiter:1.11.2')
testImplementation('org.mockito:mockito-junit-jupiter:2.23.0')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.3.1')
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.3.1')
}
我们的依赖项中的相关部分:
testCompileClasspath
+--- org.springframework.boot:spring-boot-starter-test -> 2.1.3.RELEASE
... (junit4 excluded)
+--- org.testcontainers:testcontainers:1.10.2
| +--- junit:junit:4.12
| | \--- org.hamcrest:hamcrest-core:1.3
...
+--- org.junit.jupiter:junit-jupiter-api:5.3.1 (*)
\--- org.junit.jupiter:junit-jupiter-engine:5.3.1
期望的行为:
@Testcontainers
public class MyTestcontainersTests {
@Container
private PostgreSQLContainer postgresqlContainer = new PostgreSQLContainer()
.withDatabaseName("foo")
.withUsername("foo")
.withPassword("secret");
@org.junit.jupiter.api.Test
void test() {
org.junit.jupiter.api.Assertions.assertTrue(postgresqlContainer.isRunning());
}
@org.junit.Test // compile error
void oldTest() {
org.junit.Assert.fail("this should be a compile error");
}
}
您可以在github上找到示例代码。
答案 0 :(得分:0)
如果您希望库在编译时不可用,但在运行时仍然存在,则只需执行以下操作:
configurations {
testImplementation {
// Globally exclude JUnit, will not be on the testCompileClasspath thus
exclude group: 'junit', module: 'junit'
}
}
dependencies {
// Make sure JUnit is on the testRuntimeClasspath
testRuntimeOnly("junit:junit:4.12")
}
如果您需要为另一个库的生产源设置类似的设置,请删除配置名称的test
前缀,并调整排除坐标和依赖坐标。
答案 1 :(得分:0)
我刚刚尝试使用gradle 5.6.3,并且OP的方法成功删除了所有JUnit4依赖项。