Swift - 涉及IBOutlets的单元测试功能?

Jim*_*med 7 unit-testing iboutlet swift

我正在为我的Swift项目设置单元测试,并且无法测试涉及更新IBOutlets的类函数.

我有一个函数validateUrl,它希望传递一个字符串,然后验证它.如果它有效,则启用UIButton,如果它无效,则禁用UIButton.当我运行调用此函数的测试时,应用程序在启用或禁用UIButton的代码行上崩溃.故事板和控制器都具有适当的测试目标集.

这行代码:

    self.submitButton.enabled = true// Enable Submit Button
Run Code Online (Sandbox Code Playgroud)

吐出这个错误:

fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

use*_*r23 10

尝试使用以下代码初始化您的视图控制器的IbOutlet:

   let yourStoryboard = UIStoryboard(name: "Your_storyboard", bundle: nil)
   yourViewController = yourStoryboard.instantiateViewController(withIdentifier: "YourViewController") as! YourViewController
   yourViewController.loadView() // This line is the key
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (2认同)

Seb*_*mba 8

您必须使用故事板启动视图控制器.请参阅此处的文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UIStoryboard_Class/index.html#//apple_ref/occ/instm/UIStoryboard/instantiateViewControllerWithIdentifier:

如果直接初始化视图控制器,它将没有任何连接,因为在这种情况下VC本身不知道故事板.

  • 我们可以用笔尖做同样的事情吗? (2认同)