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.
我正在尝试编写导致此错误的单元测试
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.