ViewControllerをテストするためにSwiftでテストケースを記述しようとしています。ただし、XCTestCaseで独自のViewControllerをインスタンス化しようとすると、 「宣言されていないタイプ「ViewController」の使用」。 (ViewControllerは自分のUIViewControllerクラスの名前です)
他の誰かが以前にこの問題に直面したことがありますか? Xcode 6ベータ5を使用しています
フレームワークを使用していない場合も、ViewController.Swiftファイルのターゲットメンバーシップをテストターゲットとして追加する必要があります。イメージに示すように、ターゲットに追加するクラスファイルを選択します。
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
シンボルにアクセスできます。
Swift 4では、新しい単体テストターゲットを作成できます。以下に示すように、選択したターゲットをインポートする必要があります
View Controller内のロジックをテストするには、それへの参照が必要です。これにより、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クラス内で定義されたロジックにアクセスできます。
忘れないでください:ストーリーボードでView Controllerにアクセスするには、識別する必要があります。そのためには、ストーリーボードに移動し、viewControllerを選択してから、右側のパネルから「IDインスペクタを表示」に移動し、ストーリーボードID = 'ViewController'の値を設定します。
詳細については、以下をご覧ください: https://github.com/msabukwaik/networking-example