测试时默认undoManager为零



我正在为使用undoManager的Swift库添加一些测试。在库的演示中,将以下打印添加到viewDidAppear:会导致打印NSUndoManagerObject

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    print(undoManager)
}

我为测试编写了另一个ViewController,当我在ViewController的viewDidAppear:中有相同的代码时,就会打印nil

我正在为测试创建ViewController,代码如下:

override func setUp() {
    super.setUp()
    // Put setup code here. This method is called before the invocation of each test method in the class.
    let storyboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))
    viewController = storyboard.instantiateInitialViewController() as! ViewController
    viewController.viewDidLoad()
    viewController.viewDidAppear(false)
    // Test and Load the View at the Same Time!
    XCTAssertNotNil(viewController.view)
}

我在ViewController的viewDidLoad:中调用becomeFirstResponder()

我想测试使用默认undoManager的逻辑,所以我需要弄清楚为什么它是nil。我已经尝试为默认的undoManager分配一个NSUndoManager的新实例,但它是只读属性。

如果您有兴趣查看代码,这里是Github存储库。

我无法获得用于该项目测试的默认undoManager,但我最终使用了以下解决方案,我认为它也同样有效。在使用undoManager的类中,我添加了一个私有NSUndoManager变量,然后在init中定义它,如下所示:

classUndoManager = undoManager
if classUndoManager == nil {
    classUndoManager = NSUndoManager()
}

使用undoManager的任何位置现在都使用classUndoManager

相关内容

  • 没有找到相关文章

最新更新