我正在使用Gradle 5的BOM(物料清单)功能.这是我为JUnit 5依赖项描述它的方式:
testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.junit.jupiter:junit-jupiter-params")
Run Code Online (Sandbox Code Playgroud)
我的假设是提供BOM将解析依赖项的版本5.4.0.但是,他们得到了解决5.1.1.我不知道为什么.(我还要求enforcedPlatform()锁定指定的版本)
检查JUnit 5的BOM我们发现所有org.junit.jupiter依赖项都以版本列出5.4.0(在项目中解析为5.1.1),所有org.junit.platform依赖项都列在版本中1.4.0,并在项目中正确解析.
我不确定我错过了什么,并希望在这里得到一些帮助.谢谢!
编辑:
我使用Sormuras响应并将所有BOM移动到dependencies {}块的顶部,但仍未获得版本5.4.0.然后我怀疑它可能来自我使用的Gradle Spring Dependency Management插件,所以当我评论它时,我得到了版本JUnit 5.4.0.如何禁用来自Gradle Spring Dependency Management插件的JUnit?
最后:
我决定直接使用Spring Boot Dependencies BOM并删除Gradle插件:
implementation(platform("org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE"))
我想这个插件是在Gradle 5之前为那些版本的Gradle创建的,你不能使用BOM文件.现在有了BOM支持,我可以直接包含它.这样我的JUnit版本就像我在enforcedPlatform()块中指定的一样.
我接受了下面的Sam Brannen的答案,因为他很好地解释了问题是如何发生的以及解决了什么问题,我认为这对使用旧版本Gradle的人来说很重要.
我在进行以下集成测试时遇到问题
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
@SpringBootTest
@ActiveProfiles("test")
@TestMethodOrder(OrderAnnotation.classs)
public class FooServiceIT {
@Test
@Order(1)
void testUploadSuccess() { ... }
@Test
@Order(2)
void testDownloadSuccess() { ... }
@Test
@Order(3)
void testDeleteSuccess() { ... }
}
Run Code Online (Sandbox Code Playgroud)
我希望在运行测试时执行顺序为1、2、3,但是由于某种原因,实际的执行顺序为2、3、1。
Tbh,我不知道为什么注释不起作用。我正在将Spring Boot 2.1.3与JUnit 5.4一起使用。