0

如果抛出异常,我需要在 junit 中进行测试,但会一次又一次地失败。

我在 stackoverflow 和其他来源中阅读了有关该主题的一堆问题和答案。最终我看到了这个页面,它解释了junit.org的 Class ExpectedException的用法。

由于我无法进行自己的测试,因此我复制了他们的基本示例,但它仍然无法正常工作。

这是我的代码:

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

import org.junit.Rule;
import org.junit.jupiter.api.Test;
import org.junit.rules.ExpectedException;

class AssertExceptionTest {
    
    @Rule
    public ExpectedException thrown= ExpectedException.none();

    @Test
    public void throwsNothing() {
        // no exception expected, none thrown: passes.
    }

    @Test
    public void throwsExceptionWithSpecificType() {
        thrown.expect(NullPointerException.class);
        throw new NullPointerException();
    }
}

引用我上面提到的页面,解释是“......在指定预期异常的类型之后,当抛出这样的异常时,您的测试成功,如果抛出不同的异常或没有异常,则测试失败......

问题是测试仍然失败,无论我做什么,它失败是因为我试图验证:抛出 NullPointerException。

我想也许是因为我使用的是 junit 5,所以我的测试失败了。但是,来自stackoverflow的这个问题暗示了其他情况:提出问题的人提到他在eclipse中使用junit 5的方式与我的代码相同,成功。

技术细节:eclipse 版本:2019-12 (4.14.0) junit 版本:junit 5 在 Ubuntu 上工作,版本:18.04.2 LTS。

更新:我使用了assertThrows(),它对我有用。但是,我仍然对上面描述的方法没有成功的原因感到困惑,这里有很多人建议。

提前致谢!

4

1 回答 1

1

JUnit 5 不支持开箱即用的 JUnit 4 规则。

要使您的代码正常工作:

  1. 添加以下依赖项(当然,版本可能会随着时间而改变)
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-migrationsupport</artifactId>
    <version>5.5.2</version> 
    <scope>test</scope>
</dependency>
  1. 接下来,放在@EnableRuleMigrationSupport你的测试类之上。

而已。有关更多信息,请参阅

于 2020-06-30T09:31:38.797 回答