私は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
句は決して起動されません。
私はこのように、以下の質問があります。
- は、私は新しいコンパイラで何をしようとしているのためのサポートはありませんという根本的な問題ですか?
- 唯一の解決策は、私が上記にリンクした質問に応答してuser chownで記述されたものですか?
- 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
部分に変更されたことを示しました。一つの小さな注意点がありました:
- 私が作成する「SomeClass.gcno」と「SomeClass.gcda」のファイルのために(示さhereないよう
<TargetNameTest>
)<TargetName>
のビルド設定を変更する場合は、必要に応じ...<TargetName>.build/Objects-normal/i386/
ディレクトリにあります。
もう一度お手数をおかけします。
お返事ありがとうございます。私は[この回答](http://stackoverflow.com/a/4282467/800788)からファイルを見つけるために_how_を見つけることができました。 – Meesh