模拟嵌套函数正在给出 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和其他框架的新手。请帮忙!

不起作用,因为您尝试模拟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);
        ...
    }

有关如何使用 Powermock 模拟静态方法的更多详细信息。

相关内容

  • 没有找到相关文章