我正在尝试为一个写得很差的方法编写一个测试用例,下面是该方法的实现:

public void processData(){
 DB.connectToDB1();
 List rawData = DB.getRawData();
 List processedData = new List();
 for (Object obj : rawData){
  //pass through filter
  if(obj.passesFilter){
   processedData.add(obj);
  }
 }
 DB.connectToDB2();
 DB.insertProcessedData(processedData);
}


我想测试过滤器规则是否正常工作,应该采取哪种方法?

最佳答案

您应该模拟DB并在getRawData()上返回要处理的数据列表:

Mockito.when(DB.getRawData()).thenReturn(myList);


然后使用Mockito.verify通过使用processedData来检查应该通过筛选器的所有rawData,方法是使用Captor,它可以捕获传递到insertProcessedData的数据:

@Captor
ArgumentCaptor<String> listCaptor;

Mockit.verify(DB).insertProcessedData(listCaptor.capture());
List<Object> processedData = listCaptor.getValue();


然后,您可以检查processedData是否需要任何内容​​(例如,预期尺寸,...)。

07-28 09:28