【发布时间】:2016-04-12 21:58:04
【问题描述】:
我刚开始学习使用 XCTest 和 xcode 7.2 编写单元测试,我认为这个 Xcode 不支持 OCMock 框架。我对这个框架一无所知。我现在只有 XCTest 框架。我的问题是如何为单例对象编写案例。在这里,我使用了一些带有依赖注入的代码来制作属性和所有内容。
@property (nonatomic, strong) UIApplication *application;
- (UIApplication*)application
{
if (!_application)
{
_application = [UIApplication sharedApplication];
}
return _application;
}
- (IBAction)pushNotificationsSwitchWasToggled:(id)sender
{
UISwitch *toggleSwitch = sender;
if (toggleSwitch.on)
{
[self.application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert)];
}
else
{
[self.application unregisterForRemoteNotifications];
}
}
测试
如果要测试上述方法
- (void)testToggleOnRegistersForPushNotifications_On
{
//given
SettingsViewController *sut = [[SettingsViewController alloc] init];
sut.application =[UIApplication sharedApplication];
//Here only one object is created ? not new right.
[sut.pushNotificationsSwitch setOn:YES];
//when
[sut pushNotificationsSwitchWasToggled:sut.pushNotificationsSwitch];
//here I am expecting code whether registerForRemoteNotificationTypes method is called or not.
}
1) 这里当我们在任何地方使用单例时,对象只会被创建一次。在测试用例中,我不想使用真正的 [UIApplication sharedApplication] 。我想要一个虚拟对象或假对象进行测试。
2)我们如何判断远程通知是否注册(一般如何判断方法是否被调用?)。不是[UIApplication sharedApplication],您可以用NSUSerDefault 的任何单例示例向我解释(提供输入并将结果与预期进行比较。)
【问题讨论】:
标签: ios objective-c xctest