编写一个junit测试用例来调用方法

时间:2014-12-23 17:11:37

标签: java junit

我正在使用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());

有人可以帮助我构建覆盖这一行所需的最终测试

感谢

1 个答案:

答案 0 :(得分:2)

我真的不是你的测试的粉丝 - 你试图通过错误为空来证明什么?那份清单回来了吗?另外,您确定您的服务每次都会在测试中返回您想要的结果吗?

不要考虑覆盖范围内的测试;这将导致脆弱的测试和测试,给人一种虚假的安全感。您要做的是编写测试,涵盖代码可能遇到的每个条件,并且可以从中获取行覆盖。

从你的代码中,我看到两个案例。

  • roleFunctionService#getAllRolesByFunctionAndTenant可以返回非空列表。
    • 这意味着结果rolesResponse#roles包含方法提供的列表中的任何内容,这应该得到验证。
    • 这也暗示对象没有设置错误,因此它应该是null
  • roleFunctionService#getAllRolesByFunctionAndTenant可以返回一个空列表
    • 结果rolesResponse#roles为空或null;如果它是空的,那就更好了。
    • 暗示 对象的错误,由LayerContextHolder.getErrorObject()专门提供。你应该检查一下,确实是这样。

您将通过使用mocking framework来完成编写此测试的整个方法。