在 OCUnit 应用程序测试中绕过登录/身份验证

Posted

技术标签:

【中文标题】在 OCUnit 应用程序测试中绕过登录/身份验证【英文标题】:Bypass login/authentication in OCUnit application tests 【发布时间】:2013-05-09 05:29:32 【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

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));

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

【讨论】:

谢谢,SenTestCase 的测试正是我所需要的。完美运行。

以上是关于在 OCUnit 应用程序测试中绕过登录/身份验证的主要内容,如果未能解决你的问题,请参考以下文章

验证码以及登录模块的逻辑漏洞

JWT 为啥我可以绕过身份验证?

应用离线时如何绕过 Firebase 身份验证?

集成测试是不是应该绕过登录自然过程,以免多次重新测试相同的登录功能

opporeno2z安装软件时提示登录账号如何绕过

绕过对用户名/密码的 JConsole 要求 - 当使用带有 JMX 的 Jaas 自定义登录模块来处理授权和身份验证时