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)
为啥@interface 中声明的变量中的值不会在 XCTest 中的方法之间持续存在?
SwiftKeychainWrapper xctest 返回 nil