28

私は iPhone の単体テストの作成に関する Apple のドキュメントに従ってきましたが、箱から出してすぐにはルーチンが機能しないようです。単体テストがどこでアプリケーション デリゲートへの参照を取得するのか、よくわかりません。

私の依存関係は次のようなものです: My_Program_target -> UnitTesting_target -> UnitTests_bundle

次のコード スニペットは、アサートが失敗する場所です。私は CPPUNIT に非常に精通していますが、これがどのように交差するかを理解するのに苦労しています。

- (void) testAppDelegate {

    id yourApplicationDelegate = [[UIApplication sharedApplication] delegate];
    STAssertNotNil(yourApplicationDelegate, @"UIAppliation failed to find the AppDelegate");

}

さらに:

私は自分のアプローチで論理テストを行うことにしました。XML ファイルを読み取ろうとしていますが、ファイルにアクセスできるパスを提供するバンドルを解決できません。allBundles で出力されたパスに貼り付けてみましたが、そのパスも機能していないようです。以下は、テストで実行しているものです (バンドルのパスを出力するために使用しているデバッグ ステートメントを確認できます)。

NSLog(@"BundlePaths: %@", [NSBundle allBundles]);
   NSString * path = [[NSBundle bundleWithPath:@"$(TARGET_BUILD_DIR)"] pathForResource:@"SimpleTestList" ofType:@"plist"];
   STAssertNotNil(path, @"Bundle Location couldn't find the file specified");

基本的に、パスのアサートは成功しませんが、バンドル リソースをコピーするように指示した unitTest バンドルを参照するパスまたはディレクトリに何を指定すればよいかわかりません。[NSBundle mainBundle] の呼び出しも機能しません。

4

3 に答える 3

72

わかりましたので、私はそれを理解しました。単体テストでファイルを開くには、開くファイルを次のように指定する必要があります。

NSString * filePath = [[NSBundle bundleForClass:[self class] ] pathForResource:@"SimpleTestList" ofType:@"plist"];

単体テスト バンドルの一部としてコンパイルされたクラスにこれを含めると、そのクラスは単体テスト バンドル内でファイル SimpleTestList.plist を検索します。

単体テストの場合は、「バンドル リソースのコピー」を設定して、plist を単体テスト バンドルに含めるようにしてください。

于 2009-08-03T03:05:35.800 に答える
3

アプリケーションデリゲートが必要な場合は、シミュレーターではなく、デバイス自体で単体テストを実行する必要があります。また、ビルド結果ではなく、コンソールに単体テストの出力が表示されます。

知っておくべき重要なことは、2種類の単体テストがあることです。実行可能ファイルの外部で実行されるロジックテストと、完全な実行環境を必要とする統合システムの種類のテストです。

ロジックテストは、シミュレータをターゲットとして選択して実行する必要があります。そうしないと、実行されません。

統合システムテストは、実行可能ファイルの一部としてデバイス上で実行する必要があります。これを実現するには、新しいターゲットが必要になります。

申し訳ありませんが、これはすべて非常に複雑です。この側面は、他の多くの単体テストフレームワークと比較して、まだ非常に進行中の作業です。

于 2009-07-07T15:38:54.493 に答える
0

上記の Gary の回答の Swift 3 翻訳 (文字列パスの代わりに URL を使用) は次のとおりです。

let url = Bundle(for: type(of: self)).url(forResource: "SimpleTestList", withExtension: "plist")

type(of: self)の代わりに重要で明白でない部分に注意してください[self class]

于 2016-11-29T18:27:12.727 に答える