Swiftでコマンドラインでカバレッジを取る方法
Objective-Cのときはgcov使ってUnitTestのカバレッジを取っていましたが、 Xcode7から(?)llvm-covが使えるようになったのでこれを使ってみます。
ドキュメントを見ると使い方としては結構単純で、 レポートを出力するには、以下のようにPROFILEとBINを与えてやればレポートが出力されます。
llvm-cov report [options] -instr-profile PROFILE BIN [SOURCES]
PROFILEとBINは、コードカバレッジをONにしてテストを実行するとお馴染みのDerived Data以下に出力されます。
以上のことを踏まえてコマンドラインで実行すると以下のようにすることでカバレッジのレポートを出力させることができます。
注:{}内はプロジェクトによって変更してください。
xcodebuild test -scheme {SchemeName} -configuration Debug -destination 'platform=iOS Simulator,name=iPhone 6' -derivedDataPath build -enableCodeCoverage YES
xcrun llvm-cov report -instr-profile build/Build/Intermediates/CodeCoverage/{SchemeName}/Coverage.profdata build/Build/Intermediates/CodeCoverage/{SchemeName}/Products/Debug-iphonesimulator/{ProductName}.app/{ProductName}
結果はこんな感じで出力されます。
Filename Regions Miss Cover Functions Executed ----------------------------------------------------------------------- .../Headers/NSException.h 0 0 nan% 0 nan% ...eaders/NSObjCRuntime.h 0 0 nan% 0 nan% ...usr/include/MacTypes.h 0 0 nan% 0 nan% ...sdk/usr/include/math.h 0 0 nan% 0 nan% ...sr/include/objc/objc.h 0 0 nan% 0 nan% ...r/include/sys/_types.h 0 0 nan% 0 nan% ..._iOS/AppDelegate.swift 26 21 19.23% 14 21.43%
ただこれファイル名が長いと...省略されて見えなかったりするのがちょっと微妙。。
あと、CIと連動させて表示したいとかだとこのままだと厳しいですね