Use of undeclared type 'ViewController' when unit testing my own ViewController in Swift?

hoomi picture hoomi · Aug 14, 2014 · Viewed 24.1k times · Source

I have been trying to write test cases in Swift to test my ViewController. However, when I try to instantiate my own ViewController in a XCTestCase I get "Use of undeclared type 'ViewController' ". (ViewController is the name of my own UIViewController class)

enter image description here

Has anyone else faced this issue before? I am using Xcode 6 beta 5

Answer

Yatheesha B L picture Yatheesha B L · Aug 14, 2014

Swift 1

You should add ViewController.swift file's target membership also as your test target also if you are not using framework. Select class file add to target as shown in image:

enter image description here

OR

If you are ViewController is within a framework : ViewController class is in different target and You are not declaring class with public access level. By default Classes are internal (Accessible within a target). Declare it as public and also make methods or properties as public if you want to access it i.e

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 Update

In your test target, just import the module you want to test using the @testable keyword:

@testable import moduleToTest

You can now access public and internal symbols in your test target.

swift 2 Xcode 7 unit testing