使用未声明的类型' ViewController'什么时候在Swift中测试我自己的ViewController?

时间:2014-08-14 10:34:09

标签: swift xctest

我一直在尝试在Swift中编写测试用例来测试我的ViewController。但是,当我尝试在XCTestCase中实例化我自己的ViewController时,我得到“使用未声明的类型'ViewController'”。 (ViewController是我自己的UIViewController类的名称)

enter image description here

之前有其他人遇到过这个问题吗?我正在使用Xcode 6 beta 5

3 个答案:

答案 0 :(得分:46)

Swift 1

如果您不使用框架,还应将ViewController.swift文件的目标成员资格也添加为测试目标。选择类文件add to target,如图所示:

enter image description here

OR

如果您是ViewController在框架内:ViewController类位于不同的目标中,并且您没有声明具有公共访问级别的类。默认情况下,类是内部的(在目标中可访问)。声明它是公共的,如果你想访问它,也可以将方法或属性公之于众,即

public class ViewController: UIViewController {

    public var content: String!

    override public func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override public func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

Swift 2更新

在测试目标中,只需使用@testable关键字导入要测试的模块:

@testable import moduleToTest

您现在可以访问测试目标中的publicinternal符号。

swift 2 Xcode 7 unit testing

答案 1 :(得分:3)

我最近也遇到了这个错误,上面没有一个步骤解决了这个问题,修复它的是从你想要运行测试的目标中的编译源构建阶段中删除非swift文件上。

确保您的应用实际上正在编译。这是默默失败的错误消息并没有帮助

enter image description here

答案 2 :(得分:0)

在swift 4中你可以创建一个新的单元测试目标,它应该导入你选择的目标,如下所述

为了测试视图控制器中的任何逻辑,你应该有一个对它的引用,这样为了到达viewController,你应该首先引用一个故事板,如下所述

// Put setup code here. This method is called before the invocation of each test method in the class.
let storyBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
    viewController = storyBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
    _ = viewController.view

以前的代码应插入setUp方法中,每次运行单元测试时都会调用此方法。请注意,viewController是在XCTestCase类中定义的变量,如下面的屏幕截图中所述

现在,您可以通过调用viewController.funCode或viewController.variable来访问viewController类中定义的任何逻辑

enter image description here

不要忘记:为了通过故事板到达视图控制器,您应该识别。为了做到这一点,你应该去故事板,然后选择viewController,然后从右侧面板,转到“显示身份检查器”并设置故事板ID ='ViewController'的值

有关详细信息,请查看:https://github.com/msabukwaik/networking-example