因此,我需要为我正在改进的一些(遗留)代码编写测试。在一个方法中,我尝试解析一些字符串(应该是合法的 JSON)。那么一个可能的JSONException
如果字符串不代表有效的 JSON,则会捕获该错误。就像是:
public void transformToJSON(String source) {
try {
JSONObject js = new JSONObject(new JSONTokener(item.getHtml()));
}
catch (JSONException e) {
log(e)
}
//than js is added to an Hashset and the method is done
}
所以我想为良好的输入编写一个测试(看看我是否生成了正确的 JSON 对象)。通过检查集合中的对象,这很“容易”。
然而,对于错误的输入,我需要找出是否抛出了正确的错误。
我知道代码中是否抛出错误,我可以在测试中检查它。
- 通过设定规则
public ExpectedException thrown=
ExpectedException.none();
并在测试方法中检查它。
- 通过增加
@Test(expected = JSONException.class)
高于测试
但两者都不起作用try..catch
blocks.
如何测试 catch 块是否捕获了正确的异常?我想尽可能少地更改源代码。
在 JUnit 测试类中你可以做的是使用fail("this should not have happened")
在 try 或 catch 块中,具体取决于什么应该工作,什么不应该工作(例如:在 JUnit 类中尝试和 catch,而不是在实际方法中!)。
但是,使用方法中的 try/catch 块,您无法查看是否发生异常,因为它是在方法内处理的。因此,您必须在方法中抛出异常而不是捕获它,即
public void transformToJSON(String source) throws JSONException { ... }
然后它将检查是否发生异常。
或者,您可以返回一个布尔值,表明转换是否成功。然后您可以测试返回值是否为真/假以及是否符合您的预期。
public boolean transformToJSON(String source) {
boolean success = true;
try {
JSONObject js = new JSONObject(new JSONTokener(item.getHtml()));
}
catch (JSONException e) {
log(e)
success = false;
}
//than js is added to an Hashset and the method is done
return success;
}
在你的测试类中:
@Test
public void testTransformToJSON() {
assertTrue(transformToJSON("whatever"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)