0

1000 以上の単体テストを行うプロジェクトがあり、xctool の並列化オプションを使用してビルドを高速化することを考えていました。

だから私はそれをオンにして、logicTestBucketSize を 50 に設定しました。

私の質問: バケットは独自のサンドボックスで独立して実行されますか、それとも単体テストで設定されるグローバル変数を共有しますか? これは、テスト間の相互汚染を説明する可能性があります

4

1 に答える 1

1

はい。テストを並行して実行する場合、xctool はテストの各バケットを 1 つのプロセスで実行し、複数のバケットを異なるプロセスで同時に実行します。さらに、バケット化をケース ベースで行うかクラス ベースで行うかを で選択できます-bucketBy class。多くのテスト ケースを含む非常に大きなテスト クラスがない限り、おそらく class を使用する必要があります。

次の理由により、以前は失敗しませんでしたが、現在はテストが失敗する可能性があります。

  1. テスト ケースは、同じバイナリにグループ化されている限り、別のテスト クラスからのものであっても、前のテスト ケースによって設定されたグローバル状態に依存します。テストが実行される順序が異なるか、まったく実行されない可能性があるため、このテストは失敗します。
  2. テストによってグローバル状態が変更され、その後のテストが失敗する原因となります。影響を受ける可能性のある他のテストが既に実行された後にそのテストが実行されたため、これは以前は問題ではなかった可能性があります。

最初のタイプの失敗に対処する良い方法は、バケット サイズ 1 で実行することです (後で実行するモードに応じて、バケットごとのモードまたはバケットごとのモードのいずれか)。

于 2015-03-03T19:39:14.840 に答える