这是经过测试的代码:
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailComposeController = [[MFMailComposeViewController alloc] init];
[mailComposeController setSubject:nil];
[mailComposeController setToRecipients:@[Text_Email_Me_Email]];
[mailComposeController setMailComposeDelegate:self];
[self.frontViewController presentViewController:mailComposeController
animated:YES
completion:nil];
}
这是测试代码:
id mailComposerMock = [OCMockObject mockForClass:[MFMailComposeViewController class]];
[[[mailComposerMock stub] andReturnValue:@YES] canSendMail];
[[[mailComposerMock stub] andReturn:mailComposerMock] alloc];
(void)[[[mailComposerMock stub] andReturn:mailComposerMock] init];
[[[mailComposerMock expect] andReturn:nil] setMailComposeDelegate:self.contactItemManager];
[[[mailComposerMock expect] andReturn:nil] setToRecipients:@[@"[email protected] /cdn-cgi/l/email-protection"]];
[[[mailComposerMock expect] andReturn:nil] setSubject:nil];
[[[mailComposerMock expect] andReturn:self.frontViewController] presentingViewController];
[self.contactItemManager handleSelectionOfContentItemWithTitle:Text_Contact_Me_Email_Me];
[mailComposerMock verify];
错误指出:
[theTestingClass testEmailMe] failed: OCMockObject[MFMailComposeViewController]: unexpected method invoked: setSubject:nil
正如您所看到的,我已经在调用 setSubject 了。
我还没有确切地确定为什么会发生这种情况,但是如果您构建一些依赖项注入,则可以绕过它:
- (void)handleSelectionOfContentItemWithTitle:(NSString *)title mailComposeViewController:(MFMailComposeViewController *)mailComposeViewController;
另外,避免退货nil
在 void 方法中。
[[mailComposerMock expect] setSubject:nil];
如果您要将模拟对象传递到可以将 compose 控制器作为参数的方法中,那么您的测试应该可以工作。
或者,您可以模拟自定义工厂方法:
+ (MFMailComposeViewController*)mailComposeViewController
{
return [[MFMailComposeViewController alloc] init];
}
不完全是答案,但希望是一个有用的解决方法。我避免嘲笑alloc
and init
亲自。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)