XCTest 中 viewDidLoad 的设置值

Posted

技术标签:

【中文标题】XCTest 中 viewDidLoad 的设置值【英文标题】:settings values of viewDidLoad from XCTest 【发布时间】:2015-10-15 06:15:03 【问题描述】:

我正在为我的一个项目编写单元测试用例并且遇到了很多问题,因为这是我第一次编写测试用例。我的应用程序是典型的登录,然后是基于导航控制器的应用程序。 我正在为视图控制器编写测试用例,我在 viewdidload 中设置一些值。这些值是从 NSUserdefaults 和以前的视图控制器中获取的。我在 xunit 的 setup() 方法中创建了 viewcontroller 对象,如下所示:

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
    viewController = storyboard.instantiateViewControllerWithIdentifier("AlertDetailsViewController") as! AlertDetailsViewController

现在,当我运行安装程序时,会发生崩溃,因为在加载之前没有应该由此类接收的对象。有没有一种方法可以在加载 viewdidLoad() 之前为我的视图控制器设置值? 另外我应该如何测试它的nsuserdefaults。我需要从 nsuserdefault 保存/检索值。有没有办法模拟它?

问候 潘卡伊

【问题讨论】:

【参考方案1】:

我知道回复晚了..但是这是给新观众的...

var alertdetailViewController: UIViewController?
weak var alertDetailViewControllerObj: AlertDetailsViewController?

override func setUp() 
    super.setUp()
    // Put setup code here. This method is called before the invocation of each test method in the class.

    alertdetailViewController = UIStoryboard(name: "AlertDetailsViewController", bundle: nil).instantiateViewController(withIdentifier: "AlertDetailsViewController")

    ashTestResultViewControllerObj = alertdetailViewController as? AlertDetailsViewController

    XCTAssertNotNil(alertdetailViewController?.viewDidLoad())

alertdetailViewController 的viewDidLoad 将开始执行。您可以设置断点并调试您的viewdidload 方法。 如果您的 Viewcontroller'viewDidLoad 方法中没有初始化任何对象,那么您可能会发生崩溃。您无法处理。

【讨论】:

以上是关于XCTest 中 viewDidLoad 的设置值的主要内容,如果未能解决你的问题,请参考以下文章

Swift (iOS) 代码覆盖率和 XCTest (mock)

使用 XCTest 在单元测试中获取变量的 nil 值

为啥@interface 中声明的变量中的值不会在 XCTest 中的方法之间持续存在?

SwiftKeychainWrapper xctest 返回 nil

XCTest:如何正确设置 UITextView 的可访问性特征?

带信号量的 XCTest 单一异步设置