final WatchFolderDataVO watchFolderDataVO = new WatchFolderDataVO();
final SessionFactory sessionFactoryMock = EasyMock.createNiceMock(SessionFactory.class);
final Session sessionMock = EasyMock.createNiceMock(Session.class);
EasyMock.expect(sessionFactoryMock.openSession()).andReturn(sessionMock).anyTimes();
sessionMock.load(watchFolderDataVO, 5);
EasyMock.expectLastCall();
EasyMock.replay(sessionFactoryMock);
watchFolderDao.setSessionFactory(sessionFactoryMock);
EasyMock.replay(sessionMock);
watchFolderDao.updateWatchFolderDataTable(pollingTime, xmlOnly, 5, fileWatcherDetails);
EasyMock.verify(sessionFactoryMock);
EasyMock.verify(sessionMock);
当我调用updateWatchFolderDataTable时,我收到以下错误
验证时出现预期失败:load(com.disney.datg.services.directorywatcher.beans.WatchFolderDataVO@65a601b0,5):expected:1,actual:0
因为在方法....中创建了WatchFolderDataVO的新实例。
final WatchFolderDataVO watchFolderDataVO = new WatchFolderDataVO();
try {
session = getSession();
session.load(watchFolderDataVO, watchFolderDataId);
答案 0 :(得分:1)
你显然明白失败是因为WatchFolderDataVO
的不同实例,所以我不会对此做太多。
有几种方法可以解决这个问题,假设你不想重构不创建WatchFolderDataVO
的新实例
我会建议EasyMock.isA()
匹配器。这将确保使用您提供的类型的对象调用该方法。请记住,如果使用一个匹配器,则必须使用匹配器来获取方法的所有参数。所以你的期望会变成:
sessionMock.load(EasyMock.isA(WatchFolderDataVO.class), EasyMock.eq(5));
EasyMock.expectLastCall();
请记住,这不会很好地处理空值。如果使用null WatchFolderDataVO
调用该方法,那么EasyMock将会陷入大堆。
capture()
方法和Capture
Captures允许您获取调用该方法的对象并对其进行断言。如果确实需要确保使用不同(或特定)对象调用方法,或者需要确保在调用方法之前设置了给定状态,这可能很有用。同样,capture()
方法是匹配器,因此您必须对方法的所有参数使用匹配器,因此您的期望将如下所示:
Capture<WatchFolderDataVO> watchFolderDataCapture = new Capture<WatchFolderDataVO>();
sessionMock.load(EasyMock.capture(watchFolderDataCapture ), EasyMock.eq(5));
EasyMock.expectLastCall();
//The rest of your test
//You can then do tests like the following
WatchFolderDataVO capturedValue = watchFolderDataCapture .getValue();
assertNotSame(capturedValue, watchFolderDataVO);