【问题标题】:Swift unit test - unexpectedly found nil while unwrapping an Optional valueSwift 单元测试 - 在展开可选值时意外发现 nil
【发布时间】:2015-06-11 12:19:10
【问题描述】:

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

fatal error: unexpectedly found nil while unwrapping an Optional value

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

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

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

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

有什么想法吗?

【问题讨论】:

  • 在您的测试中,songTitleTextField 似乎已被初始化。因此无。
  • 我的测试都没有看到songTitleTextField。然而,他们都打电话给viewDidLoad,这就是songTitleTextField.placeholder = "Enter your song title here..."所在的位置

标签: ios swift unit-testing optional


【解决方案1】:

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

要解决这个问题,您可以在单元测试类中自己创建和分配视图控制器的视图,方法是这样写: 让 _ = self.mockSubject.view

这里 mockSubject 是 viewController。

【讨论】:

    【解决方案2】:

    在这里猜测。

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

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

    @IBOutlet weak var songTitleTextField: UITextField!

    注意!

    通常,当您运行您的应用程序时,视图已正确初始化,并且 songTitleTextField 是一些东西。但是当你在测试模式下运行你的代码时,songTitleTextField 还没有被初始化和创建,因此它是nil

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

    希望我是对的 :-)

    【讨论】:

    • 是的!大脸,这将教会我在 IB 中匆忙申报...谢谢!
    猜你喜欢
    • 2018-09-22
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多