0

ビュー コントローラーをセットアップする単体テストを作成しようとしています。ビューの初期化を取得する 2 つの方法を試しました。最初の方法は、バンドルを使用して nib コンテンツをロードし、探しているものを除外することです。次のように:

MyViewController *controller = nil;
....
NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
NSObject* nibItem = nil;
while ( (nibItem = [nibEnumerator nextObject]) != nil) {
    if ([nibItem isKindOfClass:[MyViewController class]]) {
    controller = (MyViewController*) nibItem;
    break;
    } else {
        NSLog(@"nibItem class is %@", [nibItem class]);
        NSLog(@"nibItem is %@", nibItem);
    }
}

これらのコードが終了した後、コントローラーはまだ nil です。いくつかのログを挿入して nib クラス (%@ プレースホルダー) を検査しましたが、MyViewController と同じであることがわかりました (少なくとも両方のクラスの説明はそうでした)。これらのコードがデバッグ/リリース ターゲットで非常にうまく機能することは確かですが、単体テストを実行している間は機能しません。

つまり、クラスの説明は同じですが、クラスが異なるということですか?

私が試した 2 番目の方法は、initWithNibNamed:owner:options メソッドを使用することです。単に xib ファイル名を指定するだけですが、Xcode は nib がロードされたがビュー アウトレットが設定されていないと応答します。正しくセットアップされていることを再確認してください。

  1. Interface Builderdr で、カスタム クラス名を指定します。
  2. テスト ターゲットのコピー ビルド リソース セクションのリストに xib ファイルを追加します。
  3. テーブルビュー アウトレットをインターフェイス ファイルにリンクします (ただし、ビュー アウトレットをクラスにドラッグすることはできませんが、クラス内の tableView に自動的にポイントされます)。

これまで、テスト パスを取得できる唯一の方法は、View Controller のビューとテーブル ビューを手動で設定することです。

4

1 に答える 1