在iOS应用程序测试期间,如何访问主机应用程序中的单例实例?

时间:2015-05-20 16:04:09

标签: ios swift testing xctest kif

我正在使用Swift编写iOS应用程序,我们正在使用Parse作为后端。我正在进行一些验收测试,并使用OHHTTPStubs模拟了Parse API。

我正在编写一个测试,点击我们的登录表单并登录给定用户。在视图控制器中,我们调用PFUser.logInWithUsernameInBackground函数。在完成块内,我正在调用println(PFUser.currentUser()),我可以看到它设置正确。

但是,当我从我的测试用例中调用println(PFUser.currentUser())时,它仍然是零。我想确保用户已登录,并且用户名是正确的。

测试是应用程序测试,它们被注入主机应用程序,并使用KIF编写。所以我认为测试可能包含自己独立的PFUser单例实例,而不是在主机应用程序上访问它。所以我需要弄清楚如何访问主应用程序中的currentUser()

有什么方法可以告诉我的测试使用主应用程序中的PFUser类吗?

如果你认为这通常是开箱即用的,我应该在代码中寻找什么样的错误? (例如桥接标题,构建设置等)

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我需要从主包中访问该类,我通过将此行添加到测试目标中的帮助文件来实现:

let AppUser: AnyClass! = NSBundle.mainBundle().classNamed("PFUser")

这允许我执行AppUser.currentUser() == nil之类的检查,并在主包上调用AppUser.signOut()之类的函数,而不是在测试包中。

原因是主包和测试包是分开的,并且它们之间不共享类。 This OHHTTPStubs wiki page深入探讨了Xcode中托管和非托管测试之间的区别。