我正在使用JMockit來單元測試調用不同Web服務並填充數據庫的數據服務。我正在嘲笑每個Web服務調用,並使用Expectations/results來爲服務提供我的返回數據。jmockit捕獲mocked方法參數
我有一個問題,我必須迭代對象列表並每次調用Web服務使用不同的參數。我想捕獲這個參數,以便將它提供給一個CreateTestData方法,該方法將返回我想要的。 數據集是一定程度上取決於彼此
測試類:
public class testDataService {
@Mocked
private WebService1 webServiceClientMocked1;
@Mocked
private WebService2 webServiceClientMocked2;
@Autowired
private DataService dataService;
@Test
public void createTestData() {
final DataSet1 dataSet1 = CreateMyTestData.createDataSet1();
final DataSet1 dataSet2 = CreateMyTestData.createDataSet2();
// these are populated using other methods not shown
final List<String> listStrings = new ArrayList<String>();
final List<String> entities = new ArrayList<String>();
new Expectations() {{
webServiceClientMocked1.getDataSet1("stringA", true);
result = dataSet1;
}};
new Expectations() {{
webServiceClientMocked2.getDataSet2("stringB");
result = dataSet2;
}};
new Expectations() {{
for(String s : listStrings){
webServiceClientMocked1.getDataSet4(s,(List<String>) any);
returns(CreateMyTestData.createDataSet4(s, entities));
}
}};
//doesnt work
//new Expectations() {{
//webServiceClientMocked1.findDataPerParamters(anyString, (List<String>) any);
//result = CreateMyTestData.createDataSet4(capturedString, capturedListStrings);
//}};
//call data service to test
dataService.doSaveData();
}
數據服務類:
public class DataServiceImpl implements DataService
{
public void doSaveData() {
//do a bunch of stuff
dataSet1 =webServiceClientMocked1.getDataSet1("stringA", true);
//do more stuff
dataSet2 = webServiceClientMocked2.getDataSet2("stringB");
Collection<Stuff> dataSet3 = saveToDB(dataSet2); //save data and return a different set of data
for(Stuff data : dataSet3) {
//take dataSet3, iterate over it and call another webservice
dataSet4 = webServiceClientMocked1.getDataSet4(data.getStringX(), data.getListStrings());
// keep doing more junk
}
}
這是可能的?
可以粘貼顯示你的完整代碼,其中的問題是,這樣的比較容易回答。有時一些代碼比千言萬語(或類似的東西)更好... – ramsinb
添加了代碼細節,尚未測試jdevelop的輸入但 – chapsme
測試了jdevelop的輸入,它工作的很棒!謝謝!!編輯代碼以顯示我如何應用。 – chapsme