要增加项目代码覆盖率,我需要在此方法中到达分支 ParseException :
public String SearchEngine(String removecommand)
{//INCOMING-SEARCH¿Email¿@gmail.com
JSONArray databaseupdated = read(pathdatabase);
ArrayList<String> matchlist = new ArrayList<String>();
JSONObject mainobj = new JSONObject();
JSONArray userinfo = new JSONArray();
JSONObject obj = new JSONObject();
for(int i = 0; i<databaseupdated.size(); i++)
{
String option = "";
String value = "";
try {
JSONObject json = (JSONObject) new JSONParser().parse(removecommand);
option = (String) json.get("option");
value = (String) json.get("value");
mainobj= (JSONObject) new JSONParser().parse(databaseupdated.get(i).toString());
userinfo =(JSONArray) new JSONParser().parse(mainobj.get(mainobj.keySet().toString().substring(1,mainobj.keySet().toString().length()-1)).toString());
obj = (JSONObject) new JSONParser().parse(userinfo.get(0).toString());
} //EDIT, there is a lot of code not explained, but here is the parse EXCEPTION
catch (ParseException e) {
return "false";
}
if(SearchEngineTRUEFALSE1(mainobj.keySet().toString().substring(1,mainobj.keySet().toString().length()-1),option,value))
{
matchlist.add(obj.get("Email").toString());
}
}
return matchlist.toString();
}
本能是我们必须放一个非法&#34;的字符串,因为它实际上不是一个字符串而无法解析,但你怎么放这样的东西没有导致编译错误(比如使用int来导致faulse解析)。任何想法如何测试这个捕获&#34;分支&#34;?
编辑:这是上面使用解析异常
调用的方法{{1}}
答案 0 :(得分:1)
试试这个:
throw new ParseException("Parse exception description you want");
答案 1 :(得分:0)
你可以抛出异常,就像Michaël告诉的那样,如果你使用Junit进行测试,你可以使用预期的注释来做这样的事情来抓住它
@Test(expected= ParseException)
public void testFilterMessage() {
filterMessage(illformedString1, illformedString2);
}
答案 2 :(得分:0)
鉴于您更新的问题:
您希望使用模拟框架。
基本上,您必须启用正在测试的类,以便为其提供模拟 srvmt对象。并且您将该模拟配置为在调用其拥有的方法时简单地抛出该异常。好吧,你的一个测试用例配置mock来抛出异常;其他测试用例会将mock配置为返回其他结果。
换句话说:搜索“依赖注入”和“嘲弄”等术语;学习和申请。