如何使用JMock在模拟方法内部测试模拟方法

|| 我在确定如何模拟特定代码方面遇到麻烦。 这是我的方法:
public void sendNotifications(NotificationType type, Person person)
    {
        List<Notification> notifications = findNotifications(type);
        for(Notification notification : notifications)
        {
            notification.send(person);
        }
    }
我希望能够使用JMock来测试是否调用了findNotifications并返回期望值并调用了send()。 findNotifications称我的Dao被嘲笑了。通知是一个抽象类。 我有这样的单元测试,但是显然不起作用。它满足前两个期望,但仅此而已。
    @Test
public void testSendNotifications2()
{
    final Person person = new Person();
    notificationEntries.add(createEntry1);

    Mockery context = new JUnit4Mockery() {{ setImposteriser(ClassImposteriser.INSTANCE); }};
    final NotificationDao dao = context.mock(NotificationDao.class, \"notificationDao\");
    final Notification mockedNotification = context.mock(V2ADTNotification.class, \"mockNotification\");
    notifications.add(mockedNotification);

    final NotifierServiceImpl mockedService = context.mock(NotifierServiceImpl.class, \"mockedService\");

    //NotifierService service = new NotifierServiceImpl(dao);

    context.checking(new Expectations() {
        {
            one(mockedService).setDao(dao);
            one(mockedService).sendNotifications(NotificationType.CREATE, person);
            one(mockedService).findNotifications(NotificationType.CREATE);
            one(dao).getByNotificationType(NotificationType.CREATE);
            will(returnValue(notificationEntries)); 
            will(returnValue(notifications));

            one(mockedNotification).send(person);
        }
    });

    mockedService.setDao(dao);
    mockedService.sendNotifications(NotificationType.CREATE, person);
    context.assertIsSatisfied();
}

    mockedService.sendNotifications(NotificationType.CREATE, person);
    context.assertIsSatisfied();
}
我怎样才能使其按需工作? 我尝试过的另一种方式。它满足前两个期望,但不满足发送期望。
@Test
public void testSendNotifications()
{
    final Person person = new Person();
    notificationEntries.add(createEntry1);

    Mockery context = new JUnit4Mockery() {{ setImposteriser(ClassImposteriser.INSTANCE); }};
    final NotificationDao dao = context.mock(NotificationDao.class, \"notificationDao\");
    final Notification mockedNotification = context.mock(V2ADTNotification.class, \"mockNotification\");

    NotifierService service = new NotifierServiceImpl(dao);

    context.checking(new Expectations() {
        {
            one(dao).getByNotificationType(NotificationType.CREATE);
            will(returnValue(notificationEntries)); 

            one(mockedNotification).send(person);
        }
    });

    service.sendNotifications(NotificationType.CREATE, person);
    context.assertIsSatisfied();
}
我是使用Jmock的新手,所以对于它似乎不太了解我在做什么(我不知道),我深表歉意。     
已邀请:
  在模拟方法中测试模拟方法。 您确实无法做到这一点。不会在real方法中进行调用,因为您正在调用模拟而不是real方法。 您的第一次尝试未达到最后两个期望,因为使它们通过的调用仅在
sendNotifications
的实际实现中进行,而不是在您对它进行的模拟中进行。 第二个更接近于可行,但是您需要将
mockedNotification
添加到已设置为由
getByNotificationType
模拟返回的
notificationEntries
列表中。     

要回复问题请先登录注册