gpt4 book ai didi

java - 我们可以使用 mockito 模拟 spy 对象吗?

转载 作者:行者123 更新时间:2023-11-29 08:30:48 25 4
gpt4 key购买 nike

我有一个名为 RadiationControl 的类,我通过以下方式为它创建了一个 spy 。

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

我在另一个名为 StationMonitor 的类中有一个链式方法调用,它是通过使用 RadiationControl 对象调用的。当我尝试使用上面创建的 spy 程序并尝试访问具有方法参数的对象时,它们会不时发生变化。

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

因此,当我尝试为该方法调用 stub 时,使用上述语法,它会提示要正确 stub 。

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

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

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

最佳答案

Is there any better approach to deal such scenario ?

是的。

这里的问题是:

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

这违反了得墨忒耳法则(也就是不要和陌生人说话!)。

retrieveCVStationMonitorObject() 方法应该在类 RadiationControl 中可用,并将调用委托(delegate)给它的 依赖项(看起来像一个 StationMonitorLoader...)

关于java - 我们可以使用 mockito 模拟 spy 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com