当前位置: 首页 > 知识库问答 >
问题:

使用mockito的JUnit测试用例

楚良平
2023-03-14

我对junit mockito非常陌生,并尝试使用mockito编写junit测试用例。

这是我的方法,我必须为此编写一个jUnit。

public String getAllCookBooks(ChefService chefService, ChefApi chefApi) {
    JSONObject cookBooks = null;
    cookBooks = new JSONObject();
    JSONArray array = null;
    array = new JSONArray();

    try {
        if (null != chefService.listCookbookVersions()) {
            LOG.debug(SuccessCode.COOKBOOK_DETAILS_RETRIEVED_SUCCCESS
                    .getSuccessCode()
                    + "::"
                    + SuccessCode.COOKBOOK_DETAILS_RETRIEVED_SUCCCESS
                            .getMessage());
            for (CookbookVersion cookbookVersion : chefService
                    .listCookbookVersions()) {

                JSONObject cookBooksDetails = new JSONObject();

                cookBooksDetails.put("cookbook_name",
                        cookbookVersion.getCookbookName());
                cookBooksDetails.put("cookbook_version",
                        cookbookVersion.getVersion());

                cookBooksDetails.put("name", cookbookVersion.getName());
                array.put(cookBooksDetails);
            }
        } else {
            LOG.info("no cookbook present..."
                    + ErrorCode.COOKBOOK_LIST_EMPTY_ERROR.getErrorCode()
                    + " : "
                    + ErrorCode.COOKBOOK_LIST_EMPTY_ERROR.getMessage());
            cookBooks.put("error",
                    ErrorCode.COOKBOOK_LIST_EMPTY_ERROR.getMessage());
        }
        cookBooks.put("chef_cookbooks", array);
    } catch (JSONException e) {
        LOG.warn("JSON Exception "
                + ErrorCode.JSON_PARSE_ERROR.getErrorCode() + " "
                + ErrorCode.JSON_PARSE_ERROR.getMessage());
    }

    LOG.debug("cookbooks: " + cookBooks.toString());
    LOG.info("Ended getAllCookBooks method");
    return cookBooks.toString();
}

ChefService和ChefApi传递的方法参数来自第三方api

这里是呼叫chefService。listCookbookVersions()将返回CookBookVersion类类型的迭代器,如Iterable

请帮忙。


共有2个答案

徐昕
2023-03-14

你要做的(很可能)是:

ChefService chefService = mock(ChefService.class); // create the mock
when(chefService.listCookbookVersions()).thenReturn(aListOfValues); // establish what would be returned on method call, in this case 'aListOfValues'

// you could do the same for chefApi

String result = getAllCookbooks(chefService, chefApi); // call you method

//assert something on the result
江敏学
2023-03-14

你不能传递任何信息。您明确地告诉框架,当调用这个特定调用时,将返回一些内容。

ChefService chefServiceMock = mock(ChefService.class);
// some reasonable, expected entry value
List<CookbookVersion> cookbookVersions = ...; 
when(chefServiceMock.listCookbookVersions()).thenReturn(cookbookVersions);
// You're not actually using the API object, so you can pass in null.
// It'd be wiser to remove it altogether.
String actual = testObject.getAllCookBooks(chefServiceMock, null);

完成后,您需要确保它已被调用,因此您需要验证调用。

// later
verify(chefServiceMock).listCookbookVersions();

然后,确保您验证了实际结果。我见过只验证模拟工作的测试,但实际生成的数据是垃圾。

确保它是您希望从API输入列表中接收的数据。

 类似资料:
  • 我正在为我的项目创建junit测试用例。我有下面的代码,我想在其中创建一个模拟, 我正在使用jUnit和mockito核心jar。我尝试了下面的代码, 使用上述代码,它在模拟loadProperties方法时抛出错误。如何模拟Spring静态类并返回我的模拟属性对象? 任何帮助都将不胜感激。

  • 我有这个过滤器类,在使用junit进行测试时需要尽可能高的代码覆盖率。 和测试等级: 当我运行时,它在 线 我如何避免这种情况? 我需要调用这个方法并执行里面的任何内容来提供所需的代码覆盖。

  • 我正在使用Mockito编写一个JUnit测试用例,并得到一个NullPointerException。 在我的代码中是这样的:

  • 下面是这个问题:我被要求从哪里开始一个新问题。 问题是我对JUnit了解不够,或者对等的了解不够,无法以Jeff Bowman提到的方式解决这个问题。

  • 我认为自己是单元测试的新手,对McCito和JUnit完全陌生。我必须为一些简单的api调用编写单元测试。但我的测试对我来说似乎有点毫无意义,我不知道我哪里出了问题。我向现有的web服务ManagerWS添加了一个方法。java,见下文。 经理。java方法: 逻辑很简单。构造url,创建标头并将标头添加到请求中。发出请求并从响应中提取状态代码。这是我的测试。注意:类使用@RunAnd(Sprin

  • 我能够测试代码,但代码覆盖率不包括第二个开关情况。 请参考以下代码。 下面是我的测试代码。 由于我已经声明了一个带有测试值的字符串变量,所以我无法涵盖第二个switch语句。我尝试过if else的情况,但同样的问题发生了。我们还有别的办法吗?