Test PlanはXcode11から使えるようになった機能で、
Xcode11より前だったらbuild schemeごとに指定していたArgumentsやOptions、Diagnosticsなどの設定が、.xctestplan
という拡張子のファイルを使って設定できるようになっています。
Test PlanではTestファイルの中の1テスト(test
から始まるfunction)ごとに実行するかどうかの細かな指定も可能になっています。
詳しい説明はDeNAさんのこちらの記事 https://swet.dena.com/entry/2019/10/23/080000 がわかりやすかったので、そちらを参考にしてみてください。
fastlaneでTest Planを実行する
fastlane scanのドキュメント https://docs.fastlane.tools/actions/scan/#scan にはまだTest Planに関するオプションがなかったので、xcodebuild
コマンドを使って-testPlan
オプションを指定して実行するようにしました。
具体的には他のlaneから呼び出せるようにFastfile内に定義して、以下のように実行しています。
lane :unit_test do |options|
scheme = options[:env] != nil ? options[:env] : "dev"
project = 'TestProject'
destination = 'platform=iOS Simulator,name=iPhone 11 Pro Max,OS=13.1'
testplan = ENV['CI'] ? "unit.ci" : "unit.local"
run_test(scheme, project, destination, testplan)
end
def run_test(scheme, project, destination, testPlan)
sh "set -o pipefail && xcodebuild test -scheme #{scheme} -project #{project} -destination '#{destination}' -testPlan '#{testPlan}' -derivedDataPath DerivedData -enableCodeCoverage YES ENABLE_TESTABILITY=YES | xcpretty"
end
unit_testというlaneを実行することで、unit test用のTest Planを使ったテストの実行ができるようになります。
2020/02/20追記 別の書き方
上記ではxcodebuild
コマンドを使用しましたが、run_tests
のxcargs
オプションでテストプランを指定できるそうです。
https://qiita.com/kotala_b/items/00f19ecaef6cae50e161#comment-3df02864954c4145e9fa
run_tests(
scheme: "#{scheme}",
xcargs: "-testPlan #{testPlan}"
)
既にrun_tests
やscan
コマンドを使っている場合には、xcargs
を追加した方が良さそうですね!