QuickでCIの時だけ特定のテストをスキップする
CI実行時のみなど, コマンドラインからの実行時のみ特定のテストを実行したい・実行したくない場合に使える方法を紹介します.
Defineの動的設定
コマンドラインからのテスト実行時, 以下のようなコマンドを実行することで, 環境変数を渡すことができます.
これを使用し, 環境変数が定義されているかそうでないかを判定に用います.
xcodebuild -workspace ${WORKSPACE} -scheme ${SCHEME} -disable-concurrent-destination-testing \
-destination-timeout 300 \
-destination 'platform=iOS Simulator,name=iPhone 11,OS=14.4' \
clean test
clean test \
FROM_XCODEBUILD=FROM_XCODEBUILD
Swiftの場合はOTHER_SWIFT_FLAGS
で以下のように設定することで, 異なる値をDefineすることができます.
- 環境変数未定義時:
__X___
- 環境変数設定時:
__X_FROM_XCODEBUILD__
OTHER_SWIFT_FLAGS = "$(inherited) -D __X_$(FROM_XCODEBUILD)__";
Objective-Cの場合は, GCC_PREPROCESSOR_DEFINITIONS
に以下のような設定をすることで, 異なる値をDefineすることができます.
GCC_PREPROCESSOR_DEFINITIONS = (
"__X_$(FROM_XCODEBUILD)__=$(FROM_XCODEBUILD)",
"$(inherited)",
);
Quickで特定のテストをスキップする
上記の方法で判定ができるようになるので, Quickを使用する場合は以下のようにflags
を設定することで, FROM_XCODEBUILD=FROM_XCODEBUILD
の場合のみテストが実行されるようになります.
class SampleTestSpec: QuickSpec {
override func spec() {
#if __X_FROM_XCODE_BUILD__
let isFromXcodeBuild = true
#else
let isFromXcodeBuild = false
#endif
describe("", flags: [Filter.pending: isFromXcodeBuild]) {
it("") {
// do something.
}
}
}
}
2022.04.25 追記
Quick v5.0.0でflagsが使用できなくなった為, if文なりでラップする必用があります.
class SampleTestSpec: QuickSpec {
override func spec() {
#if __X_FROM_XCODE_BUILD__
let isFromXcodeBuild = true
#else
let isFromXcodeBuild = false
#endif
if !isFromXcodeBuild {
describe("") {
it("") {
// do something.
}
}
}
}
}
参考文献
この記事のコードは以下で確認することができます.
記事が気に入ったらチップを送ることができます!
You can give me a cup of coffee :)
Kyash ID: soranoba
Amazon: Wish List
GitHub Sponsor: github.com/sponsors/soranoba
PayPal.Me: paypal.me/soranoba
(Updated: )