Intellij Idea 使用IntelliJ和Gradle的Junit5

flseospp  于 2023-10-15  发布在  其他
关注(0)|答案(9)|浏览(154)

尝试使用IntelliJ 2017.2将项目迁移到java8 + Junit5

我添加了junit-jupiter-api版本5.0.0-M6
junit-platform-launcher版本1.0.0-M6
项目结构是默认的maven约定src/test/java
我发现了一些关于这个问题的文章,但没有一个能解决我的问题。

它在控制台中运行得很好,我认为这与IntelliJ默认的JUnit Runner有关,或者我缺少一些依赖项?

当我运行一个测试类时,一切都很好,但是当我像以前一样选择目录和Run all 'Tests' in Java时,我遇到了一些错误。

WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

注意:我还没有迁移测试,都是Junit 4语法。

gjmwrych

gjmwrych1#

添加特定的依赖项可以解决问题。

注意:更新INTELLIJ至2017.2.0以上,因为Junit Launcher存在一个BUG
OXYGEN如果您使用Eclipse。

下面的依赖项启用Junit 5参数化测试,可以代替DataProvider使用。

"org.junit.jupiter:junit-jupiter-params:5.0.0"
//for JUnit5 parametrized tests.

6月5日API

"org.junit.jupiter:junit-jupiter-api:5.0.0"
//JUnit5 API

如果您希望在不更改语法和导入的情况下运行遗留JUnit 4测试,则需要此选项。

"org.junit.vintage:junit-vintage-engine:4:12.0"
//for legacy JUnit4 tests

编辑:07/2018将复古跑步者的版本与木星版本相匹配

如果要使用新语法和导入运行JUnit 5测试,则需要此选项。

"org.junit.jupiter:junit-jupiter-engine:5.0.0"
//for JUnit5 tests

java.lang.NoSuchMethodError:org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

启动器

"org.junit.platform:junit-platform-launcher:1.0.0
//to handle default launcher

线程“main”中出现异常java.lang.NoSuchMethodError:org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;
如何安装JUnit5

**从Gradle 4.6版本开始,Gradle不再需要插件支持Junit 5,只需做:**并且vintage runner的版本现在与JUnit 5版本相同。

dependencies {

    testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
    testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"

    testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junitVersion"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
}

test {  
    useJUnitPlatform {
        includeEngines 'junit-jupiter', 'junit-vintage'
    }
}
dgsult0t

dgsult0t2#

我不得不将JUnit的版本从5.4.0更改为5.3.2,它的工作原理非常好。

11dmarpk

11dmarpk3#

我使用的配置如下。
只有当你也使用junit4测试时,才需要vintage引擎依赖。
只有在使用参数化测试时才需要jupiter参数。

<properties>
    <junit.version>5.0.0</junit.version>
</properties>
...
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>4.12.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
sycxhyv7

sycxhyv74#

我在企业环境中使用IntelliJ和Jupiter时遇到了问题。我能够运行“mvn test”,但在IntelliJ中启动测试时提示“IntelliJ failed to resolve junit platform launcher 1.5 2”
配置HTTP代理为我解决了这个问题:
设置->外观和行为->系统设置-> HTTP代理->手动代理配置

cygmwpex

cygmwpex5#

对于Android Studio,如果您遇到
无法解析请求“Uncategorized”。
转到您的文件..\AndroidStudioProjects\Pets\app\build.gradle
在依赖项部分,
输入这两行代码

testImplementation 'junit:junit:4.12'
 androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0-M4'
vyswwuz2

vyswwuz26#

我在junit 5.6.1中遇到了同样的问题,将其提升到5.7.0修复了它:

testImplementation "org.junit.jupiter:junit-jupiter-api:5.7.0"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.7.0"
9nvpjoqh

9nvpjoqh7#

如果你是在代理服务器后进行设置,并且maven clean install可以正常工作(但intellij不行),那么很可能是代理相关的。这就是为我解决的问题。选择代理自动检测。

dl5txlt9

dl5txlt98#

官方文档:
Maven Surefire和Maven Failsafe可以运行基于JUnit 4的测试以及Jupiter测试,只要您在JUnit 4和JUnit Vintage TestEngine实现上配置测试范围依赖项,如下所示。

<!-- ... -->
<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.22.2</version>
        </plugin>
    </plugins>
</build>
<!-- ... -->
<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <version>5.7.2</version>
        <scope>test</scope>
    </dependency>
    <!-- ... -->
</dependencies>
<!-- ... -->
798qvoo8

798qvoo89#

使用此注解代替:org.junit.Test
也将你的方法和相应的类设置为public

相关问题