我有代碼的簡單的一行:錯誤,用嘲諷的嵌套調用
DraftCampaignDetails createdDraft = draftCampaignI.createDraftCampaign(ConvertionUtil
.getDraftCampaignDetailsfromCreateDraftRequest(request));
我想嘲笑它:
ConvertionUtil action1 = PowerMockito.mock(ConvertionUtil.class);
when(action1.getDraftCampaignDetailsfromCreateDraftRequest(request)).thenReturn(details);
when(draftCampaignI.createDraftCampaign(details)).thenReturn(details);
但我收到此錯誤:
when() requires an argument which has to be 'a method call on a mock'.
添加整個測試類以獲得更多清晰度:
public class DraftCampaignActivityTest {
@Mock
IDraftCampaign draftCampaignI;
/* @Mock
ConvertionUtil util;*/
@Before
@SuppressWarnings("unchecked")
public void setup()
{
MockitoAnnotations.initMocks(this);
}
@Test
public void createDraft_newDraft() {
DraftCampaignActivity draftContoller = new DraftCampaignActivity();
CreateDraftCampaignRequest request = createRequest();
DraftCampaignDetails details = buildDraftDetails();
if(draftCampaignI != null){
System.out.println("sccdscscd");
}
/*
if(util != null) {
System.out.println("wewewew");
}*/
/// ConvertionUtil action1 = PowerMockito.mock(ConvertionUtil.class);
PowerMockito.mockStatic(ConvertionUtil.class);
PowerMockito.when(
ConvertionUtil.getDraftCampaignDetailsfromCreateDraftRequest(request)
).thenReturn(details);
when(draftCampaignI.createDraftCampaign(details)).thenReturn(details);
// when(util.getDraftCampaignDetailsfromCreateDraftRequest(request)).thenReturn(details);
CreateDraftCampaignResponse response = new CreateDraftCampaignResponse();
draftContoller.createDraftCampaign(request);
response.setDraftCampaignId(details.getDraftId());
Assert.assertEquals(response.getDraftCampaignId(),"ww");
}
private DraftCampaignDetails buildDraftDetails() {
DraftCampaignDetails details = new DraftCampaignDetails();
details.setDraftId("ww");
return details;
}
private CreateDraftCampaignRequest createRequest() {
CreateDraftCampaignRequest request = new CreateDraftCampaignRequest();
request.setCampaignInfo("campaignInfo");
request.setMarketplaceId("adadedaedaed");
DraftCampaignDetailsBase base = new DraftCampaignDetailsBase();
Money money = new Money();
money.setCurrencyCode("USD");
money.setMillicents(10L);
base.setCampaignBudget(money);
base.setCampaignName("name");
base.setDraftCampaignState("DRAFT");
request.setDraftCampaignDetailsBase(base);
return request;
//request
}
我是Mockito和Powermock的新手。請幫忙!任何幫助將不勝感激!
'draftCampaignI'被嘲笑了嗎? – dreamer
您不想'when(draftCampaingnI.createDraftCampaign ......'返回'action1'而不是'details'? – dreamer
否@malka。createDraftCampaign接受ConvertionUtil形成的細節對象並返回細節對象。更多細節可以在這裏看到http://stackoverflow.com/questions/41554497/mocking-nested-function-is-giving-npe請幫忙! – user3681970