【问题标题】:JUnit5 tests work fine with maven but not when run through Eclipse, "No tests found with test runner 'JUnit 5'."JUnit5 测试在 maven 中运行良好,但在通过 Eclipse 运行时无法正常运行,“没有使用测试运行器 'JUnit 5' 找到测试。”
【发布时间】:2018-01-22 19:13:59
【问题描述】:

我收到一个弹出窗口,标题为“无法运行测试”和消息“没有使用测试运行程序 'JUnit 5' 找到测试”。当我尝试通过Run As > JUnit Test 使用 Eclipse 运行 JUnit 5 测试时。

我有两个与测试相关的文件。一个是测试套件:

...

import org.junit.jupiter.api.BeforeAll;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages("com.foo.stufftotest")

public class TestSuite {
    @BeforeAll
    public static void setup() {
        ...

另一个包含“实际”测试:

package com.foo.stufftotest;

import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

import com.foo.TestSuite;
import com.foo.business.mechanics.LogicStuff1;

public class BusinessTest {
    @Test
    public void testLogic1() {
        ...
    }

    @Test
    public void testLogic2() {
        ...
    }

    ...

所有testLogicN() 方法都依赖于在TestSuite.setup() 中完成的设置。如果setup() 没有运行,就会有很多空值,事情失败也就不足为奇了。当我尝试从 project 的上下文菜单中运行 JUnit 时,所有的测试都被触发并且它们都失败了;该套件似乎没有被识别。当我尝试从TestSuite.java 的上下文菜单中专门运行 JUnit 时,我得到了我在问题顶部提到的错误。

但是,当我在项目上运行maven test 时,套件正确触发,并且所有测试都通过了。因此,代码本身似乎不是问题。

我不记得 JUnit 4 有这个问题,尽管我从未在这个特定项目中使用过 JUnit 4。

是我用错了 Eclipse,还是用错了 JUnit5?这里有什么解决办法?

【问题讨论】:

  • 课堂上BusinessTest:你导入了什么@Test? JUnit 4 还是 5?在 Eclipse 中启动此类时会发生什么?
  • 我正在使用 JUnit5 @Test;我已经编辑以显示这一点。当我直接启动测试用例文件时,我会遇到所有失败,这是预期的行为,因为测试依赖于套件文件中发生的设置。
  • 当您选择“JUnit 4 Runner”时,Eclipse 是否执行测试?您的 TestSuite 看起来像 JUnit 4 类。
  • 嗯,好的。我打算编写 JUnit5 测试,但出于诊断目的值得一试。我只是尝试明确强制它与 JUnit 4 运行器一起运行。我没有收到“未找到测试”错误,但我确实收到了由于套件方法未触发而导致的 all-tests-failed-due-to-null-values 情况。

标签: eclipse maven junit5


【解决方案1】:

我在 Eclipse Oxygen 4.7.1 中遇到了同样的问题,尽管我的单元测试已正确使用 org.junit.jupiter 进行注释。

我使用了Maven > Update Project 并选择了Update project configuration from pom.xml,但它什么也没做,尽管我认为它会发现我在 pom 中有 JUnit5 依赖项这一事实。

我的解决方案:

  1. 打开Java Build Path,选择Libraries选项卡和Add Library
  2. 选择JUnit
  3. 为 JUnit 库版本选择 JUnit5

添加后,我可以从 Eclipse 手动执行测试。但是我仍然不确定为什么没有自动添加。

【讨论】:

  • 它对我有用。我使用的是 Spring Tool Suite 4 版本:4.0.0.RELEASE。但是,想知道为什么我在选择测试类时没有获得 run as Junit Test 选项。然而,我也可以在项目级别或测试包级别 (src/test/java) 获得这些选项。不是一个展示者,但无法弄清楚。
  • 对于那些正在搜索Java Build Path在哪里的人:右键单击项目->属性-> Java Build Path
【解决方案2】:

我收到一个弹出窗口,标题为“无法运行测试”和消息“没有使用测试运行程序 'JUnit 5' 找到测试”。当我尝试通过 Run As > JUnit Test 使用 Eclipse 运行 JUnit 5 测试时。

那是因为TestSuite 实际上不是 JUnit 5 测试类。因为它用@RunWith(来自JUnit 4)注释,所以它是一个JUnit 4 测试类。为了避免在 Eclipse 中弹出窗口,只需单击“运行配置”并选择 JUnit 4 而不是 JUnit 5 来​​运行测试类。

您遇到的另一个问题是 @BeforeAll 是来自 JUnit Jupiter 的注释。因此,使用 @RunWith(JUnitPlatform.class) 注释的类根本不支持它(除非该类也恰好包含 JUnit Jupiter 的 @Test 方法)。因此,您必须找到一种替代方法来执行“设置”代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 2019-04-25
    • 2019-11-01
    • 1970-01-01
    • 2021-12-16
    • 2013-11-08
    • 2013-08-23
    相关资源
    最近更新 更多