gpt4 book ai didi

java - 在 Mockito 中 stub 方法时,我应该使用原始实例还是 stub 实例进行测试?

转载 作者:行者123 更新时间:2023-12-02 03:15:17 24 4
gpt4 key购买 nike

我有一个要测试的服务方法:

public ScheduleView createSchedule(ScheduleView scheduleView) throws ValidationException {
scheduleView = (ScheduleView) createObject(scheduleView, ScheduleBean.class);
sendNotificationScheduleDataChangedToSchedulerDaemon();
return scheduleView;
}

sendNotificationScheduleDataChangedToSchedulerDaemon() 方法建立到名为 ServerService 的远程服务的连接,这不是您在单元测试期间想要的。远程服务在单元测试期间未运行,因此连接失败。我最好使用 Mockito 来 stub 这个方法,这样它就不会被调用:

public void testCRUOperations() {
// Create the service
ScheduleService scheduleService = (ScheduleService) ServiceFactory.getInstance().createService(ScheduleService.class);
ScheduleService scheduleServiceSpy = spy(ScheduleService.class);
doNothing().when(scheduleServiceSpy).sendNotificationScheduleDataChangedToSchedulerDaemon();

现在,我的问题是,我应该如何调用 createSchedule() 方法,以便 stub 方法不会被执行?

scheduleView = scheduleService.createSchedule(newscheduleView);

scheduleView = scheduleServiceSpy.createSchedule(newscheduleView);

我已经尝试了这两种方法,但 stub 方法仍然被执行,并且我的日志中仍然收到 ConnectException

我已经检查了这里以及 Mockito 框架网站上的其他问题,但我无法弄清楚。 stub 方法的正确方法是什么?

最佳答案

这对于评论来说太长了,所以把它放在这里。

我不确定 stub ,但其他一切似乎都表明应该进行重构。这个问题清楚地表明,所讨论的方法或与之交互的方法是紧密耦合的,应该将其抽象为可注入(inject)的依赖项

public interface NotificationService {
void sendNotificationScheduleDataChangedToSchedulerDaemon();
}

public class ScheduleService {
private NotificationService notificationService;

public ScheduleService(NotificationService notificationService) {
this.notificationService = notificationService;
}

public ScheduleView createSchedule(ScheduleView scheduleView) throws ValidationException {
scheduleView = (ScheduleView) createObject(scheduleView, ScheduleBean.class);
notificationService.sendNotificationScheduleDataChangedToSchedulerDaemon();
return scheduleView;
}
}

现在可以在单元测试期间模拟依赖项,以便它不会影响实际服务,并且具体实现将在生产代码中使用。

关于java - 在 Mockito 中 stub 方法时,我应该使用原始实例还是 stub 实例进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40399861/

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