java - 在 JUnit 中检查异常的最佳实践是什么?

标签 java testing junit

我正在尝试编写测试用例。从我读到的内容来看,我的测试应该从一开始就失败,我应该努力让测试通过。然而,我发现自己编写测试检查边界和它们应该导致的异常:

@Test(expected=NegativeArraySizeException.class)
public void testWorldMapIntInt() {
    WorldMap w = new WorldMap(-1, -1);
}

@Test(expected=IndexOutOfBoundsException.class)
public void testGetnIntnInt() {
    WorldMap w = new WorldMap(10,10);
    Object o = w.get(-1, -1);
}

但是,此测试默认通过,因为 Java 无论如何都会抛出异常。有没有更好的方法来处理这些预期的异常,可能是默认失败的方法——迫使我努力处理这些情况?

最佳答案

我同意你呈现的风格不太好。问题是它不检查抛出异常的方法中的位置,因此可能会出现漏报。

我们通常为这样的异常编写测试:

public void testWorldMapIntInt() {
    try {
        WorldMap w = new WorldMap(-1, -1);
        Assert.fail("should have thrown IndexOutOfBoundsException");
    }
    catch (IndexOutOfBoundsException e) {}
}

关于java - 在 JUnit 中检查异常的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272665/

相关文章:

java - 如何集成 Citrus 框架和 BDD Cucumber

java - 如何模拟 S3 以在 Junit 中测试 Java 代码

java - Maven 对源项目的依赖(爆炸)

如果被捕获,Java NumberFormatException 将停止工作

angularjs - 使用 angularjs 测试 promise

testing - 通过 SOAP API 插入 ApexTestQueueItem 记录时启用调试日志记录

testing - 什么是单一故障假设 w.r.t 边界值分析?

java - EasyMock 异常处理

java - 查找两次的 "NOR"

java - 每次触发监听器时,我的监听器实现都会创建一个新数组,这是一个问题吗?