2013/12/17

Xcode 5でXCTestでのコードカバレッジを取る方法について

XCTestでコードカバレッジを取ろうとしたらうまくいかなかったので、調べたところ、いつものようにStackoverflowに回答があって、それでカバレッジを取れるようになったので手順を紹介します。

  1. テストターゲット向けにObjective-C ClassとしてGcovTestObserverを作成する

  2. GcovTestObserver.mに次のコードを追加する

    #import "GcovTestObserver.h"
    
    @implementation GcovTestObserver
    
    - (void) stopObserving
    {
        [super stopObserving];
        UIApplication* application = [UIApplication sharedApplication];
        [application.delegate applicationWillTerminate:application];
    }
    
    @end
    
  3. AppDelegate.mの@implementation内に次のコードを追加する

    #ifdef DEBUG
    + (void)initialize {
        [[NSUserDefaults standardUserDefaults] setValue:@"XCTestLog,GcovTestObserver"
                                                 forKey:@"XCTestObserverClass"];
    }
    #endif
    
  4. AppDelegate.mのapplicationWillTerminate:内に次のコードを追加する

    - (void)applicationWillTerminate:(UIApplication *)application
    {
    #ifdef DEBUG
        extern void __gcov_flush(void);
        __gcov_flush();
    #endif
    }
    
  5. Generate Test Coverage FilesをYesにする

  6. Instrument Program FlowをYesにする

これでテストを実行すると、~/Library/Developer/Xcode/DerivedData/<プロジェクト名>-<てきとうな文字列>/Build/Intermediates/<プロジェクト名>.build/Debug-iphonesimulator/<ターゲット名>.build/Objects-normal/i386あたりに.gcnoと.gcdaができているはずです。

あとは、以前に紹介したCoverStoryを使うなり、Jenkinsでカバレッジをグラフ表示させるなりすればよいでしょう。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。