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

Spring Boot和JUnit 5之间的交互——必须使用整体工件而不是单个工件?

安高翰
2023-03-14

这个问题以前有人问过(例如这里),但我的观察与之前报道的不一样。

我注意到,为了让JUnit 5工作,我必须包括整个JUnit 5工件

testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

相反,如果我包含单个工件,那么JUnit测试将不会被拾取

testImplementation('org.junit.platform:junit-platform-runner:1.3.1')
testImplementation('org.junit.platform:junit-platform-launcher:1.0.0')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.1')
testImplementation('org.junit.vintage:junit-vintage-engine:5.5.1')

以前有人见过类似的东西吗?

(我也在一个非Spring启动项目中尝试了这个方法——在这种情况下,可以包含单个工件。这造成了很多混乱。)

在这里,我用gradle显示了结果,但我用maven也有类似的结果。

我正在使用Gradle 5.4.1Spring Boot 2.1.7。RELEASEJUnit 5.5.1

我正在包括完整的构建。gradle和下面的测试类

build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.7.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

//  testImplementation('org.junit.platform:junit-platform-runner:1.3.1')
//  testImplementation('org.junit.platform:junit-platform-launcher:1.0.0')
//  testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
//  testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')
//  testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.1')
//  testImplementation('org.junit.vintage:junit-vintage-engine:5.5.1')

}

test {
    useJUnitPlatform()
}

DemoApplicationTest.java

package com.example.demo;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class DemoApplicationTests {

    @Test
    public void failMe() {
        Assertions.assertTrue(Boolean.FALSE);
    }

}

请注意,在这种情况下,我期望在测试方法失败()中抛出异常——以证明测试方法已被运行程序拾取并且没有被默默忽略。

共有1个答案

申炳
2023-03-14

感谢@johanneslink的提示(在开头问题的评论中),现在我想我更好地理解了这些问题:

最好使用聚合工件

testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

如果您真的想使用单个工件,请确保它们的版本兼容

这种组合会有用的

testImplementation('org.junit.platform:junit-platform-launcher:1.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')

但不是这个

testImplementation('org.junit.platform:junit-platform-launcher:1.3.1')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')

(其他三个工件不相关,因此我在这里省略它们。例如,根据JUnit 5用户指南

junit platform runner

运行程序,用于在JUnit 4环境中的JUnit平台上执行测试和测试套件。

并且与此无关。)

 类似资料:
  • 如果我用MockBean替换Autowired的话,它是有效的,但我不知道为什么

  • 根据我的理解,函数和void函数可以被调用,并且它们将在其中执行代码。 然而,我不明白括号内的变量的用途。即使少了其中一个,代码也无法运行。然而,似乎您可以为这些变量分配不同的名称,它仍然可以工作。 这些变量是如何相互联系/相互作用的?指: 1.)双倍幂(双基,int指数) 2.)void print_pow(双基,int指数) 3.)print_pow(基数、指数);

  • 我有两个组件A和B,其中组件A包含一个按钮。我希望当用户点击这个按钮时,在组件B上启动一个功能 组件 B 使用路由渲染。我正在考虑使用带有可观察布尔值的服务,该布尔值指示是否单击了 A 中的按钮。这是实现它的正确方法吗?

  • 本文向大家介绍UIWebView和JavaScript之间是怎么交互的?相关面试题,主要包含被问及UIWebView和JavaScript之间是怎么交互的?时的应答技巧和注意事项,需要的朋友参考一下 UlWebView是i〇S SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页 然后显示想显示的内容。其中就要用至JavaScript的知识,而UlWebView与javascript交互

  • 问题内容: 我的json文件看起来像这样,我正在尝试在for循环中访问元素。 我这样做是这样的: 但是我收到错误消息:“ TypeError:列表索引必须是整数,而不是dict”。我是python(和json)的新手。有人可以建议我要去哪里错吗? 问题答案: 您遍历该 值 通过引用的名单, 没有 指标。 只需 直接 使用这些值(字典): 您可能想给它一个更有意义的循环名称:

  • 问题内容: 我正在学习使用Python和API(特别是此世界杯API,http://www.kimonolabs.com/worldcup/explorer) JSON数据如下所示: 我只是试图打印此API中的所有名字。这是我所拥有的: 但是当我运行它时,出现错误“ … TypeError,… TypeError:列表索引必须是整数,而不是str”。 我四处寻找解决方案,但似乎发现了更多“更深入”