如何惯用JUnit4来测试某些代码是否抛出异常?

我当然可以这样做:

@Test
public void testFooThrowsIndexOutOfBoundsException() {
  boolean thrown = false;

  try {
    foo.doStuff();
  } catch (IndexOutOfBoundsException e) {
    thrown = true;
  }

  assertTrue(thrown);
}

我记得有一个注释或断言.xyz或something,对于这种情况来说,它远没有那么笨拙,更符合JUnit的精神.

推荐答案

这取决于JUnit版本和您使用的断言库.

JUnit <= 4.12的最初答案是:

@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {

    ArrayList emptyList = new ArrayList();
    Object o = emptyList.get(0);

}

尽管Answer https://stackoverflow.com/a/31826781/2986984对JUnit<;=4.12有更多选项.

参考:

Java相关问答推荐

在URL类图中表示Java swing类

我应该避免在Android中创建类并在运行时编译它们吗?

如何在Java中声明未使用的变量?

现场观看Android Studio中的变化

Com.example.service.QuestionService中的构造函数的参数0需要找不到的类型为';com.example.Dao.QuestionDao;的Bean

测试容器无法加载类路径初始化脚本

如何使用Jackson将XML元素与值和属性一起封装

Java ArrayList的整数和数组的泛型

Groovy/Java:匹配带引号的命令选项

从LineChart<;字符串、字符串和gt;中删除数据时出现特殊的ClassCastException;

无法将GSON导入到我的JavaFX Maven项目

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

在Java中将对象&转换为&q;HashMap(&Q)

在权限列表中找不到我的应用程序

为什么使用lo索引来解决二进制搜索问题不同于使用hi索引?

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

";home/runner/work/中没有文件...匹配到[**/pom.xml];Maven项目的构建过程中出现错误

如何设置默认序列生成器分配大小

在数组中查找素数时出现逻辑错误

如何调查进程列表中不可见的活跃 MySQL 事务?