我一直在尝试在Swift中编写测试用例来测试我的ViewController。但是,当我尝试在XCTestCase中实例化我自己的ViewController时,我得到“使用未声明的类型'ViewController'”。 (ViewController是我自己的UIViewController类的名称)
之前有其他人遇到过这个问题吗?我正在使用Xcode 6 beta 5
答案 0 :(得分:46)
如果您不使用框架,还应将ViewController.swift文件的目标成员资格也添加为测试目标。选择类文件add to target,如图所示:
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.
}
}
在测试目标中,只需使用@testable
关键字导入要测试的模块:
@testable import moduleToTest
您现在可以访问测试目标中的public
和internal
符号。
答案 1 :(得分:3)
答案 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类中定义的任何逻辑
不要忘记:为了通过故事板到达视图控制器,您应该识别。为了做到这一点,你应该去故事板,然后选择viewController,然后从右侧面板,转到“显示身份检查器”并设置故事板ID ='ViewController'的值