1
我有一个程序,我想模拟使用Mockito的数据。
我的主要计划是AdDataAggregate
,它叫AdDataConnect
。
AdDataConnect
调用一个API,该API返回一个被解析为JSON并聚合的字符串。我的模拟没有被我的程序使用
我创建了模拟并返回数据,但它们并未被主程序使用。
有人可以告诉我我的方式错误。在此先感谢您的帮助。
//Main Program
public class AdDataAggregate {
public List<AdData> processInfo(long[] adIds){
AdDataConnect adDataConnect = new AdDataConnect();
List<AdData> adAccumData = new ArrayList<AdData>();
for (long adId: adIds) {
data = adDataConnect.connectToData(adId); <———— method to Mock.
}
}
}
//Test Program
@RunWith(MockitoJUnitRunner.class)
public class AdDataTest {
@InjectMocks
private AdDataAggregate adDataAggregate = new AdDataAggregate();
@Mock
private AdDataConnect adDataConnect;
private String oneAdId =
"[{\"advertiser_id\":\"1\",\"ymd\":\"2015-12-" +
"07\",\"num_clicks\":10,\"num_impressions\":100}," +
"{\"advertiser_id\":\"1\",\"ymd\":\"2015-12-" +
"06\",\"num_clicks\":20,\"num_impressions\":200}," +
"{\"advertiser_id\":\"1\",\"ymd\":\"2015-12-" +
"05\",\"num_clicks\":30,\"num_impressions\":300}]";
@Test
public void testWithOneAdId(){
MockitoAnnotations.initMocks(this);
adDataConnect = mock(AdDataConnect.class);
adDataAggregate = mock(AdDataAggregate.class);
when(adDataConnect.connectToData(eq(1L)))
.thenReturn(oneAdId);
String myString = adDataConnect.connectToData(1L);
long[] adIds = new long[]{1L};
List<AdData> outData = adDataAggregate.processInfo(adIds);
Assert.assertEquals(1, outData.size());
Assert.assertEquals(myString, oneAdId);
Assert.assertEquals(60, outData.get(0).getNumImpressions());
Assert.assertEquals(600, outData.get(0).getNumImpressions());
}
}
非常感谢。这工作完美。 – user2547177
太棒了!请接受我的回答,以便获得信用。谢谢! –