首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试“处理异常”junit

测试“处理异常”junit
EN

Stack Overflow用户
提问于 2013-07-30 19:39:18
回答 2查看 923关注 0票数 0

我有一个处理异常的方法:

代码语言:javascript
运行
复制
public boolean exampleMethod(){

    try{
      Integer temp=null;
      temp.equals(null);
      return
      }catch(Exception e){
        e.printStackTrace();
      }
    }

我想测试一下

代码语言:javascript
运行
复制
public void test_exampleMethod(){}

我试过了

代码语言:javascript
运行
复制
@Rule
public ExpectedException expectedException=ExpectedException.none();

public void test_exampleMethod(){
    expectedException.expect(JsonParseException.class);
    exampleMethod();
}

但这不起作用,因为异常是在内部处理的。

我也试过

代码语言:javascript
运行
复制
@Test(expected=JsonParseException.class)

但是处理相同的issue...the异常

我知道我可以

代码语言:javascript
运行
复制
assertTrue(if(exampleMethod()))

但是它仍然会将堆栈跟踪打印到日志。我更喜欢干净的logs...Any建议?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-30 19:52:28

您不能在内部测试一个方法正在做什么。这是完全隐藏的(除非有副作用,在外面是可见的)。

测试可以检查对于特定输入,该方法是否返回预期的输出。但是你不能检查,这是怎么做的。因此,您无法检测是否存在您处理过的异常。

所以:要么不处理异常(让测试捕获异常),要么返回一个告诉您异常的特殊值。

无论如何,我希望您真正的异常处理比在您的示例中更明智。

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 19:52:03

如果该方法不抛出异常,则不能期望得到异常!

下面是如何为抛出异常的方法编写Junit测试的示例:

代码语言:javascript
运行
复制
class Parser {
    public void parseValue(String number) {
        return Integer.parseInt(number);
    }
}

正常测试用例

代码语言:javascript
运行
复制
public void testParseValueOK() {
    Parser parser = new Parser();
    assertTrue(23, parser.parseValue("23"));     
}

异常测试用例

代码语言:javascript
运行
复制
public void testParseValueException() {
    Parser parser = new Parser();
    try {
       int value = parser.parseValue("notANumber");   
       fail("Expected a NumberFormatException");
    } catch (NumberFormatException ex) {
       // as expected got exception
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17955899

复制
相关文章

相似问题

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