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

在混合Java+Kotlin项目中运行JUnit4+JUnit5Jupiter测试的pom.xml Maven配置

汤枫
2023-03-14

我无法成功配置maven项目来运行Java和Kotlin混合JUnit4/JUnit5Jupiter测试。

我也在JUnit team GitHub issues和Kotlin slack Channel上发布了类似的问题:-https://GitHub.com/junit-team/junit5/issues/1899-https://kotlinlang.slack.com/archives/c0922a726/p155880442804330

问好,马克西姆

共有1个答案

太叔炎彬
2023-03-14

好吧...我花了几个小时好像找到答案了。这里是多模块maven项目的pom.xml文件的示例,用于执行混合的JUnit4 Vintage和JUnit5 Jupiter测试,以及混合的Java和Kotlin测试类,其限制如下所述:

src/
  test/
    java/
      **/*JUnit4VintageJavaTest.java  +
      **/*JUnit4VintageKotlinTest.kt  +
      **/*JUnit5JupiterJavaTest.java  +
      **/*JUnit5JupiterKotlinTest.kt  +
    kotlin/
      **/*JUnit4VintageJavaTest.java  -
      **/*JUnit4VintageKotlinTest.kt  +
      **/*JUnit5JupiterJavaTest.java  -
      **/*JUnit5JupiterKotlinTest.kt  +

哪里

+表示:将执行测试

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.github.daggerok</groupId>
  <artifactId>mixed-kotlin-java-jupiter-tests-maven-execution</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <!--
  <modules>
    <module>module-1</module>
    <module>module-2</module>
  </modules>
  -->

  <properties>
    <java.version>1.8</java.version>
    <kotlin.version>1.3.31</kotlin.version>
    <junit-jupiter.version>5.5.0-M1</junit-jupiter.version>
    <junit-platform.version>1.5.0-M1</junit-platform.version>

    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
    <maven-surefire-plugin.version>3.0.0-M3</maven-surefire-plugin.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib</artifactId>
      <version>${kotlin.version}</version>
    </dependency>

    <!-- junit 4 -->
    <dependency><!-- already contains junit:4.12 dependency, so we are not going to add it explicitly! -->
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-test-junit</artifactId>
      <version>${kotlin.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency><!-- vintage engine is required if you wanna execute JUnit 4 together with JUnit 5 Jupiter tests... -->
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
      <version>${junit-jupiter.version}</version>
      <scope>test</scope>
    </dependency>

    <!-- junit 5 -->
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-test-junit5</artifactId>
      <version>${kotlin.version}</version>
      <scope>test</scope>
      <!-- includes junit-jupiter-api:5.0.0 and junit-jupiter-engine:5.2.0, but we need other versions -->
        <exclusions>
            <exclusion>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency><!-- includes junit-jupiter-api and junit-jupiter-engine dependencies -->
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${junit-jupiter.version}</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <defaultGoal>test</defaultGoal>

    <plugins>
      <plugin>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-maven-plugin</artifactId>
        <version>${kotlin.version}</version>
        <configuration>
          <experimentalCoroutines>enable</experimentalCoroutines>
        </configuration>
        <executions>
          <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <sourceDirs>
                <sourceDir>${project.basedir}/src/main/java</sourceDir>
                <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
              </sourceDirs>
            </configuration>
          </execution>
          <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>test-compile</goal>
            </goals>
            <configuration>
              <sourceDirs>
                <sourceDir>${project.basedir}/src/test/java</sourceDir>
                <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
              </sourceDirs>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <executions>
          <execution>
            <id>default-compile</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-testCompile</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>java-compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>java-test-compile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
      </plugin>
    </plugins>
  </build>

</project>
git clone https://github.com/daggerok/mixed-kotlin-java-jupiter-tests testme ; cd $_ ; mvn test

只有一个问题无法回答是否可能,以及如何配置maven项目,允许在src/test/kotlin test sources目录中放置和识别java测试类?但似乎这是一个不同的问题,必须关闭一个。

我的带有相应示例的PR刚刚合并到junit-team/junit5-samples项目中,可在此获得

 类似资料:
  • 我错过了什么? 编辑: 看来Gradle也不接我的测试。当我转到时,它指示0 test。 在IntelliJ中,我打开Gradle窗口,点击“刷新所有Gradle项目”按钮,刷新库。 然后在我的测试类中,我在类声明的顶部添加了。 当我执行时,结果可以在下面找到:

  • 我试图运行一个基本的Kotlin主文件,但问题是我没有任何可用的运行/调试配置。 我的main.kt文件位于src>main下,是一个非常简单的Helloworld程序。见下图。当我输入Add configuration>kotlin并在Main Class中键入MainKt时,我得到警告:Class MainKt not found。在以前的项目中,MainKt是默认的,我不必手动添加配置。还有

  • 我在eclipse中设置了一个“Maven项目”(简单项目),并为其添加了类和单元测试。测试运行良好。 但是,当我在“src/main/java”中添加“module info.java”时,单元测试未能启动: 信息:“workspace2”是我工作区的名称,“unittest”是项目名称。 如果我通过控制台运行maven(相同的maven和java版本),它运行良好。 设置: -eclipse:

  • 我正在学习静态编程语言,所以我创建了一个带有main方法的文件,里面有简单的println方法调用,然后按下运行为静态编程语言应用程序,得到了异常错误:无法找到或加载主类learn.varabls.变量Kt-1/>ClassNotFoundExc0019:learn.varabls.变量Kt错误:无法找到或加载主类Kt导致:java.lang.ClassNotFoundExc0019: Kt

  • 我对科特林来说是全新的。我已经安装了kotlin插件来eclipse。我在下面的一个教程中找到了一个简单的例子。问题是,当我运行项目时,我收到了以下声明的错误。 为了解决这个问题,我试图运行项目作为kotlin应用程序,但我找不到这个选项。 请让我知道如何修复此错误? 代码: 错误: 更新: 为了解决这个问题,我完全按照本教程中的内容,安装了最新版本的eclipse PHOTON,但问题仍然存在。