2

我只是为我的 iOS 项目使用 OCUnit 设置应用程序测试,并试图弄清楚如何处理身份验证。我的应用程序有一个强制登录屏幕,用户需要在进入主应用程序之前通过 Facebook 进行身份验证。当用户决定进行身份验证时,它会将它们弹出到 Safari 中,让它们通过由 Facebook 管理的身份验证序列,然后将它们带回应用程序(如果他们是新用户,则需要进一步的注册步骤)。

我想弄清楚的是,我怎样才能让应用程序测试通过登录屏幕?

我考虑过的一个选项是创建一个新的构建配置(例如“Test”),它添加了一个我可以在我的代码中检测到的预处理器宏(例如“TEST = 1”)。然后,仅针对该测试配置,我可以将我的常规登录代码替换为不需要应用程序弹出到 Safari 的 FBTestSession。但是,如果有更清洁的选择,那就太好了...

这是 FBTestSession 文档: https ://developers.facebook.com/docs/reference/ios/3.0/class/FBTestSession/

提前致谢!

4

1 回答 1

2

我可以想到两种方法,都涉及运行时检测测试框架是否存在。

在您的登录代码中,查看您是否正在运行测试。如果是,请不要继续:

BOOL runningTests = NSClassFromString(@"SenTestCase") != nil;
if (runningTests)
    return;

另一种方法是使用不同的应用程序委托进行几乎什么都不做的测试。在 main.m 中:

@autoreleasepool {
    BOOL runningTests = NSClassFromString(@"SenTestCase") != nil;
    Class delegateClass = runningTests ? [TestingAppDelegate class] : [AppDelegate class];
    return UIApplicationMain(argc, argv, nil, NSStringFromClass(delegateClass));
}

第一种方法的优点是快速简单。第二种方法的优点是它是彻底的,让您在测试期间完全控制您的应用程序。

于 2013-05-31T05:53:09.250 回答