gpt4 book ai didi

java - 模拟嵌套函数给出了 NPE

转载 作者:行者123 更新时间:2023-11-30 06:57:23 26 4
gpt4 key购买 nike

您好,我在尝试编写单元测试用例时遇到空指针异常这是类(class)详细信息:

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

有关 How to mock a static method with Powermock 的更多详细信息.

关于java - 模拟嵌套函数给出了 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com