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

时间:2015-06-11 12:19:10

标签: ios swift unit-testing optional

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

fatal error: unexpectedly found nil while unwrapping an Optional value

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

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

我甚至没有尝试测试这条线,这让我感到困惑!

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在这里猜猜。

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

如果你看一下songTitleTextField的声明,它可能就像这样声明:

@IBOutlet weak var songTitleTextField: UITextField!

注意!

通常,当您运行应用程序时,视图会正确初始化,而songTitleTextField就是其中之一。但是当您在测试模式下运行代码时,songTitleTextField尚未初始化和创建,因此它是nil

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

希望我是对的: - )

答案 1 :(得分:1)

当从故事板加载视图控制器时,所有IBOutlet(如果它们已正确连接)都会为您初始化。运行单元测试时,没有与故事板的交互,因此不会初始化textField。

要解决此问题,您可以通过编写以下内容在单元测试类中自己创建和分配视图控制器的视图: let _ = self.mockSubject.view

这里的mockSubject是viewController。