模拟嵌套函数给NPE [英] mocking nested function is giving NPE
本文介绍了模拟嵌套函数给NPE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在尝试编写单元测试用例
时遇到空指针异常这是类的详细信息:
Hi I am getting Null Pointer Exception while trying to write unit test cases Here is the class detail:
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类:
This is the ConvertionUtil class:
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和其他框架的新手。
I am getting NPE. I am a novice in Mockito and other framework. Please help!
推荐答案
它不起作用,因为您尝试模拟静态
方法,您做得不好,以至于它调用导致您遇到这种情况的NPE的真实方法。
It doesn't work because you try to mock a static
method and you don't do it properly such that it calls the real method which leads to this NPE in your case.
要使用 Powermock
模拟静态
方法,您需要:
To mock a static
method using Powermock
, you need to:
- 使用
@RunWith(PowerMockRunner.class)
批注测试用例的类级别。 - 在测试的类级别使用
@PrepareForTest(ClassThatContainsStaticMethod.class)
批注 - 使用
PowerMock.mockStatic(ClassThatContainsStaticMethod.class)
模拟该类的所有方法。
- Use the
@RunWith(PowerMockRunner.class)
annotation at the class-level of the test case. - Use the
@PrepareForTest(ClassThatContainsStaticMethod.class)
annotation at the class-level of the test case. - Use
PowerMock.mockStatic(ClassThatContainsStaticMethod.class)
to mock all methods of this class.
因此,您的情况应该是:
So in your case, you should have something like:
@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);
...
}
这篇关于模拟嵌套函数给NPE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文