Swift 单元测试 - 在展开可选值时意外发现 nil

Swift unit test - unexpectedly found nil while unwrapping an Optional value

我正在尝试编写导致此错误的单元测试

fatal error: unexpectedly found nil while unwrapping an Optional value

当我 运行 我的测试正常时 (Command-U) 然后它在我的 ViewController 的这一行失败(在我的测试之外)

songTitleTextField.placeholder = "Enter your song title here..."

我什至没有尝试测试这条线,这让我很困惑!

当我构建 运行 应用程序时,通常没有问题。

有什么想法吗?

猜到这里

你说 songTitleTextField.placeholder = "Enter your song title here..." 在你的 viewDidLoad 方法中,它是从你的测试中调用的。

如果您查看 songTitleTextField 的声明,它可能是这样声明的:

@IBOutlet weak var songTitleTextField: UITextField!

注意 !

通常,当您 运行 您的应用程序时,视图会正确初始化并且 songTitleTextField 是什么。但是当您 运行 您的代码处于测试模式时,songTitleTextField 尚未初始化和创建,因此它是 nil.

解决方案可能是在使用前检查是否songTitleTextField != nil。或者将其声明为可选(带有?),或者在其他地方设置值。

希望我是对的:-)

当从情节提要中加载视图控制器时,您的所有 IBOutlet(前提是它们已正确连接)都会为您初始化。 运行 单元测试时,没有与故事板的交互,所以你的 textField 不会被初始化。

为了解决这个问题,您可以在单元测试class中自己创建和分配视图控制器的视图,方法如下: 让 _ = self.mockSubject.view

这里mockSubject是viewController.