我们可以使用mockito模拟一个间谍对象吗?

时间:2018-01-22 22:49:50

标签: java mockito junit4

我有一个名为RadiationControl的类,我用以下方式为它创建了一个间谍。

RadiationControl radCtrl = new RadiationControl();
RadiationControl spyRadCtrl = Mockito.spy(radCtrl);

我在另一个叫做StationMonitor的类中有一个链式方法调用,它使用RadiationControl对象调用。当我尝试使用上面创建的间谍并尝试访问具有方法参数并且它们不时变化的时候。

StationMonitorObject stationMonitorObject = radCtrl.getStationMonitorLoader().retrieveCVStationMonitorObject(Long.parseLong(syngId), status);

因此,当我尝试为该方法调用间谍时,使用上述语法调用它正在抱怨存根。

StationMonitorLoader stationMonitorLoader = StationMonitorLoader.getLoader(domain);
  Mockito.doReturn(stationMonitorLoader).when(spyRadCtrl).getStationMonitorLoader();

  Mockito.doReturn(stationMonitorObject).when(stationMonitorLoader).retrieveCVStationMonitorObject(any(Long.class), null);

有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:4)

  

有没有更好的方法来处理这种情况?

这里的问题是:

radCtrl.getStationMonitorLoader()
       .retrieveCVStationMonitorObject(Long.parseLong(syngId), status);

这违反了demeter的(又名不与陌生人交谈!)。

方法retrieveCVStationMonitorObject()应在类RadiationControl中可用,并将调用委托给依赖项(看起来像StationMonitorLoader ...)< / p>