ios - 测试时默认 undoManager 为 nil

标签 ios swift unit-testing nsundomanager

我正在努力向使用 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 repository如果您有兴趣查看代码。

最佳答案

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

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

任何使用 undoManager 的地方现在都使用 classUndoManager

关于ios - 测试时默认 undoManager 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273800/

相关文章:

unit-testing - 单元测试:要测试什么/什么不能测试?

ios - 保留我新创建的 NSSet

objective-c - 使用带换行符的 NSString "drawInRect"

ios - CoreData 与 Swift 和 iOS 8+ 仍然需要 willAccessValueForKey()?

ios - 基于最小版本标准对 IOS App 实现强制更新

unit-testing - 在 JSON 内容类型的 grails 单元测试(和一般情况下)中使用自定义渲染器

android - Retrofit 2 模拟最佳实践

ios - 如何向 Web View 应用程序添加上边距?

ios - AppDelegate 类不适用于 iOS Swift 应用程序中的 Obj-C 嵌入式库

ios - 以编程方式更改 UICollectionView 属性