2016-10-04 10 views
3

私は、ソースコードが存在する主なターゲット(CoolAppと呼ばせてください)と単体テストのテストターゲットそれをCoolAppTestsと呼ぶ)。また、プロジェクトの総ラインカバレッジが一定の割合を下回った場合に変更をコミットできないことを保証するGitコミットフックもあります。iOSコードカバレッジレポートには含まれてはならないファイルが含まれています

カバレッジレポートには、CoolAppのファイルだけでなく、CoolAppTestsのファイルも含まれているという問題があります。その結果、新しいテストファイルを追加すると、プロジェクトの総ラインカバレッジは実際にになる可能性があり、コミットフックの種類が役に立たなくなります。

カバレッジレポートを生成するには、私は、次の手順を経る:

xcodebuild test \ 
    -project "CoolApp.xcodeproj" \ 
    -scheme "CoolAppTests" \ 
    -destination "platform=iOS Simulator,name=iPhone 6,OS=10.0" \ 
    -configuration Debug \ 
    -enableCodeCoverage YES 

は、それから私は(xcodebuild -target CoolAppTests -showBuildSettings)ビルド設定でTEMP_ROOTディレクトリを検索することでCoolAppTestsためDerivedDataを取得します。そこから、私は/CodeCoverage/Coverage.profdataと、/CodeCoverage/Products/Debug-iphonesimulator/CoolAppTests.xctest/CoolAppTestsにあるバイナリを取得します。

PROFDATA=.../CodeCoverage/Coverage.profdata 
BINARY=.../CodeCoverage/Products/Debug-iphonesimulator/CoolAppTests.xctest/CoolAppTests 

最後に、私はレポートを生成し、その出力キャプチャ:以前に示されるように、その時点で

xcrun llvm-cov report -instr-profile "${PROFDATA}" "${BINARY}" 

を、報告書はCoolAppとCoolAppTestsの両方からのファイルが含まれています。

レポートに含まれるものを除外する方法はありますか?つまり、私の主なターゲット - CoolApp - とのファイルがありません。私のテストターゲットCoolAppTestsのファイルですか?

答えて

1

興味深い。

xcrun llvm-cov report -instr-profile Coverage.profdata 
    Products/Debug-iphonesimulator/StoryTeller.framework/StoryTeller 

通知フレームワークへのパスを指定しました。これは私にフレームワーククラスだけを示しました。

xcrun llvm-cov report -instr-profile Coverage.profdata 
    Products/Debug-iphonesimulator/xxxxxx.app/xxxxxx 

:私は私が働いているスウィフトアプリのために導出されたデータに入り、これを実行し、これを二重にチェックするには

xcrun llvm-cov report -instr-profile Coverage.profdata 
    Products/Debug-iphonesimulator/StoryTellerTests.xctest/StoryTellerTests 

:私はこれを使用していたテストのカバレッジを表示するには再び、私はアプリ内のクラスのカバレッジのみを表示しました。

あなたのコードで何が起こっているかは、テストターゲットをビルドしたときに、すべてのアプリケーションクラスとテストクラスをコンパイルするように指示したと思います。したがって、テストターゲットは、それらをテストコードの一部として認識します。それは私がしばしば開発者が見たことです。あなたのテストターゲットには、ターゲット依存関係のアプリケーションが含まれている必要がありますが、単体テストだけを実行していても、クラスを再度コンパイルする必要はありません。アプリクラスはテスト目的で自動的に利用可能になります。

+0

いくつかの質問:1)フレームワークターゲット、テストターゲット、またはその両方に対してカバレッジを有効にしていますか。 2)ビルドの出力がフレームワーク/アプリではなく静的ライブラリの場合でもこれは機能しますか? – RuslanD

+0

私はすべてのターゲットでカバレッジサポートを有効にしました(これはデフォルトだと思います)。スキームのテスト設定でカバレッジデータを収集します。静的ライブラリと同じです。わからない。しかし、私はそれが同じだろうと仮定します。コンパイルソースビルド段階にあなたのアプリケーションクラスが含まれていますか?その場合は削除してからもう一度お試しください。 – drekka

関連する問題