18

iOS アプリケーションの開発中に Test ターゲットと通常の Run ターゲットでコードを実行しているかどうかをプログラムで判断する方法はありますか?

この変数が nil であるかどうかをチェックするハックがありますが、これはテスト ターゲットにのみあるためですが、これはかなりハックのようです。

[[[NSProcessInfo processInfo] environment] objectForKey:@"XCInjectBundle"]
4

10 に答える 10

15

これらの答えはどれも本当に役に立ちませんでした。テスト ターゲットでのログ記録を制限するという唯一の目的で、テストを実行していることをアプリに知らせたかったのです。たくさんのものをログに記録していないときは、テストがより速く実行されます。そのため、スキームのテスト部分にカスタム引数を追加することでそれを行いました。

スキームのスクリーンショット

アプリケーション コードで、テストを行っているかどうかを確認できるようになりました。

- (void)logError:(NSError*)error{
    if([[[NSProcessInfo processInfo] arguments] containsObject:@"-FNTesting"])
        return;

    NSLog(@"LOG THE ERROR");
}

カスタム引数の使用方法を実際に見つけることができる唯一の場所の1つである@cameronspickertに感謝します

http://cameronspickert.com/2014/02/18/custom-launch-arguments-and-environment-variables.html

于 2015-03-13T19:36:52.730 に答える
11

ターゲット設定の「プリプロセッサ マクロ」に適切な値を定義する必要があります。

実行時にifdef文で確認できます。

于 2013-01-11T04:45:13.423 に答える
4

これで、「 UITesting 」の 1 行のコードで簡単に確認できます。

[[[NSProcessInfo processInfo] arguments] containsObject:@"-ui_testing"]

-ui_testingは、アプリのテスト時にのみ表示されます。

于 2016-10-26T07:19:39.227 に答える
4

Xcode 7.3 でテスト済み

でカテゴリを作成しますNSProcessInfo

@implementation NSProcessInfo (RunningTests)

- (BOOL)ag_isRunningTests {
  return ([self.environment objectForKey:@"XCTestConfigurationFilePath"] != nil);
}

@end
于 2016-05-19T11:18:17.537 に答える
2

Xcode 6XPC_SERVICE_NAMEでは、環境変数の値をチェックして、シミュレーターがテストを実行しているか、アプリを直接実行しているかを確認できます。

直接実行すると、変数は次のようになりますUIKitApplication:com.twitter.FabricSampleApp[0xb9f8]

単体テストを実行すると、次のようになります。com.apple.xpc.launchd.oneshot.0x10000008.xctest

+ (BOOL)isRunningUnitTests {
    NSString *XPCServiceName = [NSProcessInfo processInfo].environment[@"XPC_SERVICE_NAME"];
    BOOL isTesting = ([XPCServiceName rangeOfString:@"xctest"].location != NSNotFound);

    return isTesting;
}
于 2015-07-16T23:50:21.773 に答える
0

プロジェクト設定の[情報]タブで、(デフォルトの[デバッグ]と[リリース]に加えて)新しい構成を作成します。次に、構成ごとに、ターゲット設定([ビルド設定]タブ)でさまざまなプリプロセッサマクロを定義できます。XCodeはすでにそれを使用して、デバッグ構成に「DEBUG = 1」を追加します。これにより、コードで「#ifdefDEBUG」を使用できるようになります。「TESTING=1」など、この方法で好きな他のマクロを追加できます。

于 2013-01-11T04:49:19.650 に答える