2014-05-10 6 views
0

나는 mockito를 junit하고 mockito를 사용하여 junit 테스트 케이스를 작성하는 데 매우 익숙하다.mockito를 사용한 JUnit 테스트 케이스

다음은 junit을 작성해야하는 나의 방법입니다. ChefService 및 ChefApi 통과

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.listCookbookVersions() 내가있는 ChefService 모의 객체를 전달하는 방법을받지 못했습니다 Iterable<? extends CookbookVersion> 같은 유형의 CookBookVersion 클래스의 반복자를 반환합니다 3rdparty API를 여기

출신 비교하는 값을 돌려주는 메소드

도와주세요.

+0

귀하의 코드가 좋지 않습니다 (모든 매개 변수를 사용하지 않으므로 그 이유는 무엇입니까?) – Makoto

+0

질문을 이해할 수 없습니다 .JUnit 테스트를 작성하려고 시도 했습니까? 우리가 볼 수 있고 당신을 위해 고칠 수있는 무언가가 있습니까? –

답변

0

아무 것도 전달하지 않고 있습니다.이 특정 호출이 호출 될 때 프레임 워크에 명시 적으로 말하면 무언가을 반환하십시오.

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); 

이 완료되면, 당신이 그것을 호출되었는지 확인하고 싶을 것이다, 그래서 당신은 verify 호출하려는 것입니다.

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

그런 다음 는 실제 결과를 확인해야합니다을합니다. mock이 작동한다는 것을 검증하는 테스트를 보았지만 실제로 생성 된 데이터는 가비지입니다.

API의 입력 목록에서 번을 보내면이 데이터를 수신해야합니다. 당신이 (대부분)을 할 필요가 무엇

+0

@ Makato- 답장을 보내 주셔서 감사합니다. 메서드는 사용하지 않은 param을 사용해서는 안됩니다. 제거하겠습니다. 문제는 여기에 있습니다. Mockito.when()와 비교할 수있는 더미 값. List cookbookVersions = ... – bagui

0

이다 : 당신은 당신의 모의 쉽게 (당신은 단지 조롱하는 한 가지를 가지고)하지만 차종을 작성하게`chefApi` 매개 변수를 사용하지 않는

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 
+0

여기서 문제는 비교할 값을 만들 수 없다는 것입니다. 여기에 (chefService.listCookbookVersions()). then return (aListOfValues); 전달할 더미 값을 만들 수 없습니다. 우리가 List 을 반환하기 위해 제 3 자에게 전화해야하는 가치를 얻으려면. 어떻게 여기에 더미 값을 만들 수 있습니까? 어떤 제안입니까? – bagui

+0

내가 준 예제에서 더미 값은 제공해야하는 'aListOfValues'입니다 (제어 된 값) –

관련 문제