如何使用 JUnit Test 注释断言我的异常消息?

时间:2023-04-04
本文介绍了如何使用 JUnit Test 注释断言我的异常消息?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我已经编写了一些带有 @Test 注释的 JUnit 测试.如果我的测试方法抛出一个已检查的异常,并且如果我想将消息与异常一起断言,有没有办法使用 JUnit @Test 注释来做到这一点?AFAIK,JUnit 4.7 不提供此功能,但是否有任何未来版本提供它?我知道在.NET 中你可以断言消息和异常类.在 Java 世界中寻找类似的功能.

I have written a few JUnit tests with @Test annotation. If my test method throws a checked exception and if I want to assert the message along with the exception, is there a way to do so with JUnit @Test annotation? AFAIK, JUnit 4.7 doesn't provide this feature but does any future versions provide it? I know in .NET you can assert the message and the exception class. Looking for similar feature in the Java world.

这就是我想要的:

@Test (expected = RuntimeException.class, message = "Employee ID is null")
public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() {}

推荐答案

你可以使用 @Rule 注释与 ExpectedException,像这样:

You could use the @Rule annotation with ExpectedException, like this:

@Rule
public ExpectedException expectedEx = ExpectedException.none();

@Test
public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() throws Exception {
    expectedEx.expect(RuntimeException.class);
    expectedEx.expectMessage("Employee ID is null");

    // do something that should throw the exception...
    System.out.println("=======Starting Exception process=======");
    throw new NullPointerException("Employee ID is null");
}

请注意,ExpectedException 文档中的示例(当前)是错误的 - 没有公共构造函数,因此您必须使用 ExpectedException.none().

Note that the example in the ExpectedException docs is (currently) wrong - there's no public constructor, so you have to use ExpectedException.none().

这篇关于如何使用 JUnit Test 注释断言我的异常消息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:注释中的泛型类型 下一篇:使用 Spring 3 注解实现一个简单的工厂模式

相关文章