2017-01-09 22 views
1

你好我得到空指針異常在試圖寫單元測試用例 這裏是類的細節:嘲諷嵌套函數是給NPE

public CreateDraftCampaignResponse createDraftCampaign(CreateDraftCampaignRequest request) throws InvalidInputsException, 
     DependencyException, UnauthorizedException { 
    CreateDraftCampaignResponse draftCampaignResponse = null; 

    try { 
     DraftCampaignDetails createdDraft = draftCampaignI.createDraftCampaign(ConvertionUtil 
       .getDraftCampaignDetailsfromCreateDraftRequest(request)); 
     draftCampaignResponse = new CreateDraftCampaignResponse(); 
     draftCampaignResponse.setDraftCampaignId(createdDraft.getDraftId());  
    } 
    catch (Exception e) { 
     log.error("Create Draft Campaign Exception", e); 
     throw e; 
    } 
    return draftCampaignResponse; 
} 

這是ConvertionUtil類:

public static DraftCampaignDetails getDraftCampaignDetailsfromCreateDraftRequest(CreateDraftCampaignRequest request) { 

    DraftCampaignDetails draftCampaign = new DraftCampaignDetails(); 

    DraftCampaignDetailsBase draftCampaignDetailsBase = request 
      .getDraftCampaignDetailsBase(); (This is giving exception) 
    draftCampaign.setCampaignBudget(draftCampaignDetailsBase 
      .getCampaignBudget()); 
    draftCampaign.setCampaignName(draftCampaignDetailsBase 
      .getCampaignName()); 
    draftCampaign.setDraftCampaignState(draftCampaignDetailsBase 
      .getDraftCampaignState()); 

    draftCampaign.setCreatedUser(request.getUser()); 

    draftCampaign.setObfuscatedEntityId(request.getObfuscatedEntityId()); 
    draftCampaign.setCampaignInfo(request.getCampaignInfo()); 

    return draftCampaign; 
} 

這是我試過的:

@Test 
public void createDraft_newDraft() { 
    DraftCampaignActivity draftContoller = new DraftCampaignActivity(); 

    CreateDraftCampaignRequest request = createRequest(); 
    DraftCampaignDetails details = buildDraftDetails(); 
    if(draftCampaignI == null){ 
     System.out.println("sccdscscd"); 
    } 
    //ConvertionUtil action1 = PowerMockito.mock(ConvertionUtil.class); 
    //PowerMockito.when(action1.getDraftCampaignDetailsfromCreateDraftRequest(request)).thenReturn(details); 
    when(util.getDraftCampaignDetailsfromCreateDraftRequest(request)).thenReturn(details); 
    when(draftCampaignI.createDraftCampaign(details)).thenReturn(details); 




    CreateDraftCampaignResponse response = new CreateDraftCampaignResponse(); 
    draftContoller.createDraftCampaign(request); 
    response.setDraftCampaignId(details.getDraftId()); 
    Assert.assertEquals(response.getDraftCampaignId(),"ww"); 



} 

我正在NPE。我是Mockito和其他框架的新手。請幫忙!

回答

1

它不工作,因爲你試圖嘲弄一個static方法,你不這樣做正確,使得調用導致此NPE在你的情況下,真正的方法。

嘲笑使用Powermock一個static方法,您需要:

  1. 使用@RunWith(PowerMockRunner.class)標註在測試用例類級別。
  2. 在測試用例類級別使用@PrepareForTest(ClassThatContainsStaticMethod.class)註解。
  3. 使用PowerMock.mockStatic(ClassThatContainsStaticMethod.class)嘲笑這一類的所有方法。

所以你的情況,你應該有這樣的:

@RunWith(PowerMockRunner.class) 
public class MyTestClass { 
    @Test 
    @PrepareForTest(ConvertionUtil.class) 
    public void createDraft_newDraft() { 
     ... 
     PowerMockito.mockStatic(ConvertionUtil.class); 
     PowerMockito.when(
      ConvertionUtil.getDraftCampaignDetailsfromCreateDraftRequest(request) 
     ).thenReturn(details); 
     ... 
    } 

更多How to mock a static method with Powermock細節。

+0

你好,非常感謝你對找回。這就像午夜,我在這上面打破了我的頭。我嘲笑了靜態方法。但它現在正在給出新的錯誤。這裏是鏈接:http://stackoverflow.com/questions/41554844/error-in-mocking-nested-calls爲我的新問題。請幫忙,讓我可以有一個良好的夜晚睡覺! – user3681970

+0

與我在這裏提出從'PowerMockito.mockStatic(開始...' –

+0

我失去了,因爲他們使OOP是不可能的,例如關鍵FEATURS你不應該使用靜態方法的重要建議更換您的其他問題的線路:多態性 –