如何解决如何使用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,\"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
列表中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。