首页 > 解决方案 > Assertions.assertThrows 返回 void 而它必须返回 Throwable | JUnit 5

问题描述

我正在使用JUnit 5库,我尝试使用 assertThrows 并获取引发的异常以获取异常消息。我有这样一段代码:

import org.junit.jupiter.api.Assertions;
//import org.junit.Assert;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;

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

public class Tests {
    private static void execute() throws Exception {
        ArrayList<String> filter = ListString.filter(new ArrayList<String>(Arrays.asList("1", "2", "3")), "4");
    }

    @Test
    public void listStringTest() {
        // This part doesn't work 
        Throwable throwable = Assertions.assertThrows(Exception.class, Tests::execute);
        assertEquals("Exception texnt", throwable.getMessage());
    }
}

我收到以下消息:

在此处输入图像描述

但是文档说 assert throws 返回T extends Throwable,而不是void

在此处输入图像描述

我在哪里做错了?

标签: javaassertjunit5assertionthrowable

解决方案


您的类路径中可能有一个非常旧版本的 JUnit Jupiter。

里程碑版本 5.0.0-M3(2016 年 11 月,发行说明)将返回类型添加到assertThrows. 您的类路径中的版本似乎比这更旧。

确保您使用的是最新版本的 JUnit。


推荐阅读