2012-01-10 7 views
4

私はXcode 4.2でiPhone 5.0プロジェクトを作成しており、単体テストの実行時にコードカバレッジを見つけたいと考えています。私はXcode環境には新しく、hereの手順に従ってきました。私はテストターゲットのビルド設定を正しく変更でき、 "libprofile_rt.dylib"ファイルをうまくリンクすることができます。Xcode 4.2でコードカバレッジを見ることができません

この時点で、(Command-Uを使用して)テストを実行すると、コードがコンパイルされ、テストに合格します。私はhereと記述された問題に遭遇しません。また、私はCoverStoryをインストールしました。

最初のリンクの著者には、"Just run your unit tests and view the code coverage data as usual"が記載されています。しかし、私は.../Objects-normal/i386を見つけることができません。

#import "SomeClass.h" 

@implementation SomeClass 
@synthesize someValue; 

-(void)performWork:(BOOL)now withValue:(int)value { 
    if (now) { 
     someValue = value; 
    } 
    else { 
     someValue = value - 1; 
    } 
} 

@end 

とテストクラス:

ただ、私は以下のクラスで新しいプロジェクトを作成し、物事が働いて得るために理想的

#import "CodeCoverageTests.h" 
#import "SomeClass.h" 

@implementation CodeCoverageTests 

- (void)testExample { 
    SomeClass *obj = [[SomeClass alloc] init]; 
    [obj performWork:YES withValue:3]; 
    STAssertEquals(obj.someValue, 3, @"Value was not 3"); 
} 
@end 

、私はいくつかの方法で通知を受けることを希望しますテストが実行されると、performWorkメソッドのelse句は決して起動されません。

私はこのように、以下の質問があります。

  1. は、私は新しいコンパイラで何をしようとしているのためのサポートはありませんという根本的な問題ですか?
  2. 唯一の解決策は、私が上記にリンクした質問に応答してuser chownで記述されたものですか?
  3. 2)の解決策に従えばCoverStory(または類似のもの)を使用できますか?

更新:いくつかの闘争の後 、私は最終的に "SomeClass.gcno" と "SomeClass.gcda" ファイル(感謝@bjhomer - this linkを参照)の場所を見つけることができた、と彼らはperformWorkの条件文の一部であるifがカバーされていた(そしてelseではない)ことを美しく表現しました。

- (void)testExample 
{ 
    SomeClass *obj = [[SomeClass alloc] init]; 
    [obj performWork:NO withValue:3]; 
    STAssertEquals(obj.someValue, 2, @"Value was not 2"); 
} 

が再構築やユニットテストの再実行した後、私は.gcnoと.gcdaファイルを再読み込み、次のように確認するために、私はテストを修正しました。 CoverStoryは、範囲がperformWorkメソッドのelse部分に変更されたことを示しました。一つの小さな注意点がありました:

  1. 私が作成する「SomeClass.gcno」と「SomeClass.gcda」のファイルのために(示さhereないよう<TargetNameTest><TargetName>のビルド設定を変更する場合は、必要に応じ...<TargetName>.build/Objects-normal/i386/ディレクトリにあります。

もう一度お手数をおかけします。

答えて

1

あなたの主な問題のように聞こえるのは、Build/Intermediates/<SchemeName>.build/<ConfigurationName>-<PlatformName>/<TargetName>.build/Objects-normal/<ArchitectureName>ディレクトリが見つからないということです。そのディレクトリは、コードカバレッジを行っているかどうかに関係なく、ビルド時には常にです。これはコンパイラによって生成されたすべての中間ファイルが格納されている場所で、コード範囲を扱う場合には最後の.gcno.gcdaファイルが存在する場所です。あなたがそのディレクトリを見つけることができない場合、問題はカバレッジに関連していない、問題はあなたがそのディレクトリを見つける必要があるということです。

質問にお答えします。

  1. コードカバレッジは、Xcode 4.2以降のLLVMコンパイラでサポートされています。 LLVM-GCCでは動作しませんので、使用していないことを確認してください。
  2. いいえ、Xcode 4.2のGCC 4.2のサポートをハッキングする必要はありません。私はXcode 4.2でコードカバレッジを実行していますが、上記のいずれも行っていません。
  3. いずれにしてもCoverStoryを使用できるはずです。 GCC 4.2をサポートするためのハッキングは、ビルドされた製品がどこに行くかは変わりません。
+0

お返事ありがとうございます。私は[この回答](http://stackoverflow.com/a/4282467/800788)からファイルを見つけるために_how_を見つけることができました。 – Meesh

関連する問題