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

如何在eclipse中使用maven Junit5框架项目测试java项目中的方法

曾典
2023-03-14

我创建了一个新的maven junit5框架项目来测试现有的java项目。我在新创建的maven junit5框架项目的构建路径中添加了java项目。我右键单击要为其添加 junit 测试用例的方法,然后选择新的 junit 测试用例,并将源文件夹更改为新的 maven junit5 框架项目 src 目录,并将其余选项保留为默认值。创建了 junit 测试,并将测试作为单元测试运行,没有任何问题(下面的屏幕截图)。使用maven运行相同的测试,得到下面的错误。我在pom(下面)中添加了surefire插件,但仍然收到下面的错误。使用日食。

-------------------------------------------------------------------------------
   Test set: com.build.VersionInfoTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 s <<< FAILURE! - in com.build.VersionInfoTest
com.build.VersionInfoTest  Time elapsed: 0.002 s  <<< ERROR!
java.lang.NoClassDefFoundError: Lcom/build/VersionInfo;
Caused by: java.lang.ClassNotFoundException: com.build.VersionInfo

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>UnitTesting</groupId>
<artifactId>com.unit.testing</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>com.unit.testing</name>
<description>Junit Tests</description>
<packaging>jar</packaging>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <junit.jupiter.version>5.5.2</junit.jupiter.version>
    <junit.platform.version>1.5.2</junit.platform.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-runner</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </plugin>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
        </plugin>
    </plugins>
</build>
</project>

更新:我清理了pom(下面),但现在没有发现测试?当我用junit运行项目时,是否发现了测试?

  [INFO] Scanning for projects...
  [INFO] 
  [INFO] --------------< UnitTesting:com.unit.testing >---------------
  [INFO] Building com.unit.testing 1.0-SNAPSHOT
  [INFO] --------------------------------[ jar ]----------------------       -----------
  [INFO] 
  [INFO] --- maven-resources-plugin:2.6:resources (default-resources)      @ com.unit.testing ---
  [INFO] Using 'UTF-8' encoding to copy filtered resources.
  [INFO] Copying 0 resource
  [INFO] 
  [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @     com.unit.testing ---
  [INFO] Nothing to compile - all classes are up to date
  [INFO] 
  [INFO] --- maven-resources-plugin:2.6:testResources (default-    testResources) @ com.unit.testing ---
  [INFO] Using 'UTF-8' encoding to copy filtered resources.
  [INFO] Copying 0 resource
  [INFO] 
  [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ com.unit.testing ---
  [INFO] Nothing to compile - all classes are up to date
  [INFO] 
  [INFO] --- maven-surefire-plugin:3.0.0-M4:test (default-test) @   com.unit.testing ---
  [INFO] 
  [INFO] -------------------------------------------------------
  [INFO]  T E S T S
  [INFO] -------------------------------------------------------
  [INFO] Running com.build.VersionInfoTest
  [INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time   elapsed: 0.002 s - in com.build.VersionInfoTest
  [INFO] 
  [INFO] Results:
  [INFO] 
  [INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
  [INFO] 
  [INFO] ------------------------------------------------------------------------
  [INFO] BUILD SUCCESS
  [INFO] ------------------------------------------------------------------------
  [INFO] Total time: 1.955 s
  [INFO] Finished at: 2020-03-09T10:00:22-04:00
  [INFO] ------------------------------------------------------------------------


    <packaging>jar</packaging>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
    <junit.jupiter.version>5.6.0</junit.jupiter.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
             <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M4</version>
        </plugin>
    </plugins>
</build>
  package com.dbb.build

  import static org.junit.jupiter.api.Assertions.*;
  import org.junit.jupiter.api.Test;
  import com.dbb.build.VersionInfo;

  class VersionInfoTest {

VersionInfo versionInfo = VersionInfo.getInstance();

@Test
void getVersion() {
    String version = versionInfo.getVersion();
    System.out.println(version);
    assertNotNull(versionInfo.getVersion(), "expected a return value of"+version+"but was null");
}
  }

更新:

  [INFO] --- maven-resources-plugin:2.6:testResources (default- testResources) @ DBB-Unit-Testing ---
  [INFO] Using 'UTF-8' encoding to copy filtered resources.
  [INFO] Copying 0 resource
  [INFO] 
  [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ DBB-Unit-Testing ---
  [INFO] Changes detected - recompiling the module!
  [INFO] Compiling 1 source file to /Unit-Testing/target/test-classes
  [INFO] -------------------------------------------------------------
  [ERROR] COMPILATION ERROR : 
  [INFO] -------------------------------------------------------------
  [ERROR] /Unit-Testing/src/test/java/com/VersionInfoTest.java:[7,25]  cannot find symbol
   symbol:   class VersionInfo
   location: package com.build
  [ERROR] /Unit-Testing/src/test/java/com/build/VersionInfoTest.java: [11,9] cannot find symbol
  symbol:   class VersionInfo
  location: class com.build.TestVersionInfo
 [ERROR] /Unit-Testing/src/test/java/com/ /build/VersionInfoTest.java:  [11,35] cannot find symbol
   symbol:   variable VersionInfo
   location: class com.build.TestVersionInfo
   [INFO] 3 errors

解决方案:使用JUnit-platform-console-standalone-1 . 5 . 2 . jar并通过命令行运行单元。看起来如果我们有一个非maven项目,JUnit-platform-console-standalone似乎是一个更好的选择。

共有1个答案

邓欣可
2023-03-14

下面是我在Maven 3.x中使用的一些pom的示例,以及在Eclipse中使用JUnit 5时预期执行的测试,但也可以从命令行执行:

不要添加太多的Juniper工件,如果存在的话,有些会产生一些副作用。

还要注意的是,surefire插件的更新版本在JUnit5上曾经出现过一些问题

    <properties>
        <!-- ensure proper encoding of source and resource files in the project -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <junit-5.version>5.6.0</junit-5.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit-5.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
            </plugin>
        </plugins>
    </build>


更新:

你可以在这里找到一个小例子:https://gist.github.com/asa-git/8e34bbc51b5fcb09b7fab3efdaaa73c9

请注意,我使用的是maven版本3.6.3和JDK 8。

此外,在windows上(但在其他系统上也是如此)从命令行运行时,在系统上安装任何其他JSE之前,您需要确保JDK在您的路径上。

 类似资料:
  • 我想在一个Swing应用程序中使用一些JavaFX组件(特别是JFXPanel的HTML5呈现支持)。我的应用程序目前是在Eclipse4.3(Kepler)中设置的,我的机器上安装了最新的Java7 JDK。 这篇来自Oracle的教程建议您只需引用一个JavaFX类,它就可以在Swing应用程序中工作。所以我输入,但是Eclipse不能将其识别为有效的Java类。它确实可以识别其他Java7类

  • 问题内容: 我有Project1和Project2。Project1依赖于Project2。每次在Project2中进行一些代码更改时,我都感到厌倦,我必须导出Project2 JAR文件,并将其复制到Project1的lib文件夹中。 有没有一种方法可以自动实现呢? 或者,是否还有其他方法可以让Project1知道Project2进行了某些更改? 在项目的“构建路径”中,有一种方法可以指定对Wo

  • 问题内容: 该命令仅覆盖一个目录中的文件。 我想要整个项目,这意味着测试应覆盖dir中的所有文件以及该dir下的所有千岁树dir 。 这样做的命令是什么? 问题答案: 这应该在当前目录及其所有子目录中运行所有测试: 这应该针对给定的特定目录运行所有测试: 这应该以前缀为的导入路径运行所有测试: 这应该运行所有带有前缀的测试导入路径: 这应该在$ GOPATH中运行所有测试:

  • 问题内容: 我有一个Java项目,我想开发它而不替换源代码。我想将代码链接到我的工作空间而不进行物理替换吗? 问题答案: 从中选择您要引用的 右键单击并转到(或按Ctrl-Enter)。 在中,您可以添加当前打开的另一个项目。 如果您要覆盖某个类,则可以在当前项目中对其进行复制,然后将其移至中的类路径中。

  • 我创建了一个NetBeans企业应用程序,它由包装ejb(jar)项目和web(war)项目的ear组成。 我的web项目中有一个servlet,我想在其中使用ejb项目中的一个ejb。

  • 我在尝试创建一个简单的GWTMaven项目时遇到了很多问题,这个项目可以在Eclipse中使用。以下是我正在做的: > 在Eclipse:File中打开项目= 但是,我发现以下错误: 我不明白这个错误信息。我发现了一个关于SO的相关问题,但是在我的pom.xml中添加建议的剪报似乎没有任何作用。 有人能解释一下吗?