如果抛出异常,我需要在 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(),它对我有用。但是,我仍然对上面描述的方法没有成功的原因感到困惑,这里有很多人建议。
提前致谢!