由于一些问题,我希望项目中的 XCTest 目标运行单独的应用委托(delegate)。使用 ObjC,这是一个相对简单的过程:操作 main.m(参见:https://stackoverflow.com/a/15725328/1299041)。
既然 Swift 应用程序似乎是在 AppDelegate 中使用 @UIApplicationMain 初始化的,那么是否可以为测试目标使用单独的 AppDelegate 进行初始化?
最佳答案
如果正在测试,强烈不建议在正常代码检查中添加条件。相反,你应该在测试中模拟你的 AppDelegate 来做任何你想做的事。
然后您可以在每个 XCTestCase 的父类(super class)中替换 UIApplication is setUp 的委托(delegate)。
class MockAppDelegate:NSObject, UIApplicationDelegate {
}
class BaseTest: XCTestCase {
override func setUp() {
super.setUp()
UIApplication.shared.delegate = MockAppDelegate()
}
}
class Test1: BaseTest {
override func setUp() {
super.setUp()
// normal testing
}
}
如果您仍想停止代码执行以进行测试,这是我的有效方法:
可以给app加上启动参数,表示这是试运行
这些参数可以从 NSUserDefaults
#define IS_TESTS [[NSUserDefaults standardUserDefaults] boolForKey:@"TESTING"]
关于iOS swift : Separate AppDelegate for XCTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930137/