首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JUnit4预期的异常

JUnit4预期的异常
EN

Stack Overflow用户
提问于 2013-03-12 08:11:03
回答 2查看 7K关注 0票数 3

我正在用JUnit4为一个项目做场景测试。

在其中一个测试中,我需要检查预期的异常。在JUnit4中,我使用注释来完成此操作。

代码语言:javascript
复制
 @Test(expected=...) 

现在的问题是,在抛出异常的测试代码下面,有一些我需要检查的其他注释,这些注释不会被执行。举个例子:

代码语言:javascript
复制
   @Test(expected=NullPointerException.class)
     public void nullPointerTest() {
         Object o = null;
         o.toString();
         assertTrue(false);
     }

这个测试通过了,因为它得到了nullpointerexception,但是很明显,asserTrue(false)有一个断言错误,因此我希望它失败。

解决这个问题的最好方法是什么?解决这个问题的方法可能如下,但我不知道这是不是正确的方法。

代码语言:javascript
复制
@Test
public void nullPointerTest2() {
    boolean caught = false;
    try{
        Object o = null;
        o.toString();
    }
    catch(NullPointerException e)
    {
        caught = true;
    }
    assertTrue(caught);
    assertTrue(false);
}

第二个测试如预期的那样失败。

EN

回答 2

Stack Overflow用户

发布于 2013-03-12 19:06:19

考虑一下:

代码语言:javascript
复制
@Test(expected=NullPointerException.class)
public void nullPointerTest2() {
  boolean caught = false;
  try{
     Object o = null;
     o.toString();
  }
  catch(NullPointerException e)
  {
    // test other stuff here
     throw e;
  }
}

这允许额外的检查,同时仍然充分利用JUnit内置的异常检查。

此外,在许多情况下,我认为使用@Rule ExpectedException是比expected更好的选择。

票数 4
EN

Stack Overflow用户

发布于 2013-03-12 08:21:23

JUnit4的行为符合预期:当抛出异常时,执行不会继续。因此抛出NullPointerException,退出测试方法,JUnit4将其标记为通过,因为您预期会出现异常。空解引用后的代码实际上并不存在。

如果你想要第二个测试的行为,那么你所写的就是一个很好的解决方案。但这是一件很奇怪的事情。在我看来,你把两个不同的测试混在一起了。一个测试应该测试异常是否在异常情况下抛出。第二个测试应该测试第二个断言检查的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15351015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档