验证期望失败:load(com.disney.datg.services.directorywatcher.beans.WatchFolderDataVO@65a601b0,5):预期:1,实际:0

时间:2014-03-19 07:31:52

标签: easymock

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

1 个答案:

答案 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);