我正在使用eclemma并试图提高我的测试覆盖率:
到目前为止,这是我的代码:
public RolesResponse findRolesByTenant(RolesRequest rolesRequest)
{
RolesResponse rolesResponse = new RolesResponse();
List<Role> roleList = null;
if (StringUtils.isNotBlank(rolesRequest.getTenantCode()))
{
roleList = roleFunctionService.getAllRolesAndFunctionsByTenant(rolesRequest.getTenantCode());
}
if (CollectionUtils.isNotEmpty(roleList))
{
rolesResponse.setRoles(roleList);
}
else
{
rolesResponse.setError(LayerContextHolder.getErrorObject());
}
return rolesResponse;
}
这是我的测试:
@Test
public void findRolesByTenantTest()
{
RolesRequest rolesRequest = new RolesRequest();
rolesRequest.setTenantCode("test");
ErrorObject errorObject = new ErrorObject();
RolesResponse rolesResponse = rolesProcessService.findRolesByTenant(rolesRequest);
Assert.assertNull(rolesResponse.getError());
}
唯一的一条线是以红色突出显示这一点:
rolesResponse.setError(LayerContextHolder.getErrorObject());
有人可以帮助我构建覆盖这一行所需的最终测试
感谢
答案 0 :(得分:2)
我真的不是你的测试的粉丝 - 你试图通过错误为空来证明什么?那份清单回来了吗?另外,您确定您的服务每次都会在测试中返回您想要的结果吗?
不要考虑覆盖范围内的测试;这将导致脆弱的测试和测试,给人一种虚假的安全感。您要做的是编写测试,涵盖代码可能遇到的每个条件,并且可以从中获取行覆盖。
从你的代码中,我看到两个案例。
roleFunctionService#getAllRolesByFunctionAndTenant
可以返回非空列表。
rolesResponse#roles
包含方法提供的列表中的任何内容,这应该得到验证。null
。roleFunctionService#getAllRolesByFunctionAndTenant
可以返回一个空列表
rolesResponse#roles
为空或null
;如果它是空的,那就更好了。LayerContextHolder.getErrorObject()
专门提供。你应该检查一下,确实是这样。您将通过使用mocking framework来完成编写此测试的整个方法。