草庐IT

iOS swift : Separate AppDelegate for XCTest

coder 2023-07-15 原文

由于一些问题,我希望项目中的 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/

有关iOS swift : Separate AppDelegate for XCTest的更多相关文章

随机推荐