java - 当我通过 Maven 执行它们时,我的 JUnit 测试不起作用
问题描述
我在我的测试项目中使用 Maven,我想test
在 Maven 的生命周期中测试选项,但是我的 JUnit 测试失败了。我有一个在包中命名Arithmetics
的src.main.java
类和一个ArithmeticsTest
在src.test.java
包中命名的类。
当我ArithmeticsTest
使用 IntelliJ IDEA 自己运行时,一切正常,而且我已经预料到java.lang.AssertionError
了,那么为什么我在 maven 中运行测试选项时没有这样的功能?
控制台输出:
测试
结果:测试运行:0,失败:0,错误:0,跳过:0
src.main.java.Arithmetics.java
public class Arithmetics
{
public static int add(int a, int b)
{
return a + b;
}
}
src.test.java.ArithmeticsTest.java
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class ArithmeticsTest
{
@Test
public void testAdd()
{
assertEquals(4, Arithmetics.add(2, 3));
}
}
pom.xml
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>Test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
解决方案
根据您的问题,我可以发现三处错误的地方,虽然它们可能无法提供完整的答案,但我希望它们将朝着正确的方向迈出一步:
src/main/java
并且src/test/java
不是你写的包。它是 maven 支持的文件夹布局,基本上,如果您有代码,com.myorg.somepackage.Arithmetics
请确保您在实际物理文件夹级别具有以下布局:
src
main
java
com
myorg
somepackage
Arithmetics.java
test
java
com
myorg
somepackage
ArithmeticsTest.java
对于这两个 java 文件,包必须是com.myorg.somepackage
:
package com.myorg.somepackage;
public class Arithmetics {}
和
package com.myorg.somepackage;
public class ArithmeticsTest {}
我知道您在问题中使用的命名可能是错误的,但我仍然必须说明它,因为它可能会导致实际问题
- 第二个问题是,由于某种原因,您似乎将您的万能插件配置为使用 test ng,这是 junit 的替代品。它可能会发生,因为 testng 被放置为依赖项 - 我只能推测,因为您并没有真正显示完整的肯定插件配置,也没有提供完整的依赖项列表,但我相信你有想法:)
这是错误的,因为您使用了 junit5 依赖项以及对应于 junit 5 的导入。
- 对 junit 5 的依赖完全是一团糟:
您似乎对具有不同范围的相同依赖项有两个依赖项,这确实是错误的做法。确保您只使用test
范围并拥有所有相关的依赖项。阅读此处了解如何配置 surefire 插件的说明
另外,为了答案的完整性,请检查您是否使用最新版本的surefire插件,如果它太旧,它可能无法运行jupiter引擎(junit 5)
推荐阅读
- swift - 快速下载视频并快速在 AVPlayer 中播放
- c - tcgetpgrp() 返回值是什么意思?
- ios - “let task = session.dataTask(with: urlRequest)”如何工作并返回一个值?
- php - PHP Regex 仅匹配一些字母/单词和标点符号
- jquery - Ajax 结果用作 mysql 查询约束
- java - 如何将配置属性加载到注释参数?
- python - 从未收到 Python 原始套接字帧
- flutter - Flutter 初始化 gradle 和 Resolving dependencies 需要很长时间
- sql - Vertica DB 中的交叉连接和聚合
- sonata-admin - 在奏鸣曲管理员中覆盖编辑模板