为void方法写一个mockito测试

时间:2018-01-26 15:09:01

标签: java junit mockito void

我正在尝试编写一个编写得非常糟糕的方法的测试用例,下面是该方法的实现:

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);
}

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

1 个答案:

答案 0 :(得分:1)

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

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

然后使用Mockito.verify检查应该通过过滤器的所有rawData是否都在processedData列表中,使用Captor,它可以捕获传递的数据到insertProcessedData

@Captor
ArgumentCaptor<String> listCaptor;

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

然后您可以检查processedData是否需要(例如预期大小......)。