【问题标题】:Is it possible to perform View Controller unit tests in a iOS Library?是否可以在 iOS 库中执行 View Controller 单元测试?
【发布时间】:2015-02-27 19:33:53
【问题描述】:

我正在创建一个带有扩展 UIView 的类的 iOS 库,我需要对其执行单元测试。 但是这个自定义类需要插入到 ViewController 中并且对用户可见才能正确执行。它还会检查 view.window 是否 != nil。

iOS 应用程序 单元测试方法中,我使用以下方法插入了 UIViewController:

UIViewController *testViewController = [[MyViewController alloc] init];
UIApplication.sharedApplication.keyWindow.rootViewController = testViewController;

这样我就可以在视图控制器中插入我的自定义视图并在其中执行单元测试。

但在 iOS 库 项目单元测试方法中,UIApplication.sharedApplication 返回 nil。

是否有其他方法可以在 iOS 库中执行 UI 测试?

【问题讨论】:

    标签: ios objective-c unit-testing ui-testing


    【解决方案1】:

    回答我自己的问题。

    在我的具体情况下,view.window != nil 至关重要。

    UIApplication.sharedApplication.keyWindow 在库单元测试中确实为零。

    而不是它,我刚刚使用了:

    UIWindow *window = [[UIWindow alloc] init];
    window.rootViewController = testViewController;
    

    就这么简单。

    【讨论】:

    • 今天这仍然是正确的解决方案吗?当我尝试在库单元测试中显示视图控制器时,我在控制台中收到一条消息:“尝试在视图不在窗口层次结构中的 上显示 !”
    • 它对我不起作用。我的目标是在将 viewController 添加到 window.rootviewcontroller 之后调用 viewDidLoad 、 viewWillAppear 和其他“视图生命周期方法”等方法
    【解决方案2】:

    如果您想在 viewController 上调用所有“视图生命周期”方法,请尝试以下操作:

    let viewController = UIViewController()
    let window = UIWindow()
    let window.addSubview(viewController.view)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多