KIF 就像魔术一样,最近让我很困惑。这就是 KIF 和 XCTest 的工作原理。
在 WWDC 2014 & 2013 中说过:测试代码作为插件注入到宿主应用程序中,那么主应用程序作为插件可以窃听哪些信息?主机应用程序和插件之间的关系是什么?
使用 KIF,我们可以感知通知和 URL 请求,但它是如何工作的?我的第一个想法是主机应用程序中的所有上下文都与插件共享但是为什么在测试中,我们不能修改主应用程序中的变量?
例如:
我们有两个目标:
魔法计划
-- 魔法应用
-- MagicUITest <- KIFTest 目标
假设我有一个名为 MagicClass 的文件:
class MagicClass {
static var a = 1
}
如果我想在 MagicUITest 中修改该变量,这可能吗?
我现在面临的问题是如何将不同的 UIViewController 注入到 RootViewController 中,以便我可以从每个单独的 ViewController 运行 KIF 测试,并且不需要一直经历登录过程。我的猜测是:
在魔术应用程序中:
class AppDelegate : .. , .. {
func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
if MagicClass.a == 1 {
window.rootViewController = AViewController()
} else {
window.rootViewController = BViewController()
}
}
}
在 KIFTest 的 setUp() 中:
setUp() {
Magic.a = 2
}
但不工作..
一件事是 Magic.a = 2 不会改变 MagicApp 中的 Magic.a,二是 application(..,..,..) 函数将在调用 setUp() 之前结束..
任何想法 ?