在 eclipse IDE 上的 junit 测试中使用 @Rule 的 ExpectedException 不起作用
ExpectedException with @Rule in junit test on eclipse IDE does not work
我需要在 junit 中做一个测试,在抛出异常时通过,但一次又一次失败。
我在 Whosebug 和其他资源中阅读了关于该主题的大量问题和答案。最终我看到了这个页面,它解释了 Class ExpectedException 的用法,作者是 junit.org。
由于我自己的测试无法正常工作,所以我复制了他们的基本示例,但它仍然无法正常工作。
这是我的代码:
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,所以我的测试失败了。然而,来自 Whosebug 的 提出了不同的建议:提出问题的人提到他在 eclipse 中使用 junit 5 的方式与我的代码相同,并且成功。
技术细节:
日食版本:2019-12 (4.14.0)
联合版本:联合5
正在开发 Ubuntu,版本:18.04.2 LTS。
更新:
我使用了 assertThrows(),它对我有用。但是,我还是很纳闷,为什么我用上面介绍的很多人推荐的方法都没有成功。
提前致谢!
JUnit 5 不支持开箱即用的 JUnit 4 规则。
要使您的代码正常工作:
- 添加以下依赖(当然,版本可能会随时间变化)
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-migrationsupport</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
- 接下来,将
@EnableRuleMigrationSupport
置于测试 class 之上。
就是这样。有关详细信息,请参阅 this。
我需要在 junit 中做一个测试,在抛出异常时通过,但一次又一次失败。
我在 Whosebug 和其他资源中阅读了关于该主题的大量问题和答案。最终我看到了这个页面,它解释了 Class ExpectedException 的用法,作者是 junit.org。
由于我自己的测试无法正常工作,所以我复制了他们的基本示例,但它仍然无法正常工作。
这是我的代码:
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,所以我的测试失败了。然而,来自 Whosebug 的
技术细节: 日食版本:2019-12 (4.14.0) 联合版本:联合5 正在开发 Ubuntu,版本:18.04.2 LTS。
更新: 我使用了 assertThrows(),它对我有用。但是,我还是很纳闷,为什么我用上面介绍的很多人推荐的方法都没有成功。
提前致谢!
JUnit 5 不支持开箱即用的 JUnit 4 规则。
要使您的代码正常工作:
- 添加以下依赖(当然,版本可能会随时间变化)
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-migrationsupport</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
- 接下来,将
@EnableRuleMigrationSupport
置于测试 class 之上。
就是这样。有关详细信息,请参阅 this。