記事


テストの有効化と無効化


個々のテストを実行する前に条件に応じて有効または無効にします。





概観


多くの場合、テストは特定の状況でのみ適用可能です。例えば、特定のハードウェア機能を持つデバイスでのみ実行されるテストや、ロケールに依存する操作を実行するテストを作成したい場合があります。テストライブラリを使用すると、テストに特性を追加することで、これらの条件が満たされない場合にランナーが自動的にテストをスキップするようにすることができます。


注意

テスト中に条件が複数回評価される場合があります。


テストを無効にする


テストを無条件に無効化する必要がある場合は、disabled(_:sourceLocation:) 関数を使用します。以下のテスト関数があるとします。


@Test("Food truck sells burritos")
func sellsBurritos() async throws { ... }

テストの表示名の に特性を追加します。


@Test("Food truck sells burritos", .disabled())
func sellsBurritos() async throws { ... }

これで、テストは常にスキップされるようになります。


また、テストをスキップする際にランナーからの出力に表示されるコメントを特性に追加することもできます。


@Test("Food truck sells burritos", .disabled("We only sell Thai cuisine"))
func sellsBurritos() async throws { ... }


条件に応じてテストを有効または無効にする


特定の条件が満たされた場合にのみテストを有効にする方が適切な場合もあります。以下のテスト関数を考えてみましょう。


@Test("Ice cream is cold")
func isCold() async throws { ... }

もし現在冬であれば、おそらくアイスクリームは販売されていないため、このテストは失敗します。したがって、現在夏である場合にのみテストを有効にするのが理にかなっています。enabled(if:_:sourceLocation:) のようにテストを記述することで、条件付きでテストを有効化できます。


@Test("Ice cream is cold", .enabled(if: Season.current == .summer))
func isCold() async throws { ... }

条件付きでテストを 無効に したり、複数の条件を組み合わせたりすることも可能です。


@Test(
  "Ice cream is cold",
  .enabled(if: Season.current == .summer),
  .disabled("We ran out of sprinkles")
)
func isCold() async throws { ... }

対応するバグのレポートがある問題のためにテストが無効になっている場合は、以下のいずれかの関数を使用して、テストとバグレポートの関係を表示できます。


  • bug(_:_:)

  • bug(_:id:_:)

  • bug(_:id:_:)

  • たとえば、以下のテストはバグ番号 "12345" のため実行できません。


    @Test(
      "Ice cream is cold",
      .enabled(if: Season.current == .summer),
      .disabled("We ran out of sprinkles"),
      .bug(id: "12345")
    )
    func isCold() async throws { ... }
    

    テストに複数の条件が適用されている場合、テストを実行するには すべて の条件が満たされいなければなりません。条件が満たされない場合、テストは最初に失敗した条件をスキップ理由として記録します。



    複雑な条件を処理する


    条件が複雑な場合は、読みやすさを向上させるために、それをヘルパー関数に分解することを検討してください。


    func allIngredientsAvailable(for food: Food) -> Bool { ... }
    
    @Test(
      "Can make sundaes",
      .enabled(if: Season.current == .summer),
      .enabled(if: allIngredientsAvailable(for: .sundae))
    )
    func makeSundae() async throws { ... }
    




    以下も見よ


    実行時の動作のカスタマイズ


    テストの実行時間の制限

    テストが失敗するまでの実行時間に制限を設定します。


    static func enabled(if: @autoclosure () throws -> Bool, Comment?, sourceLocation: SourceLocation) -> Self

    false を返す場合にテストを無効にする条件特性を構築します。


    static func enabled(Comment?, sourceLocation: SourceLocation, () async throws -> Bool) -> Self

    false を返す場合にテストを無効にする条件特性を構築します。


    static func disabled(Comment?, sourceLocation: SourceLocation) -> Self

    テストを無条件に無効にする条件特性を構築します。


    static func disabled(if: @autoclosure () throws -> Bool, Comment?, sourceLocation: SourceLocation) -> Self

    その値が true の場合にテストを無効にする条件特性を構築します。


    static func disabled(Comment?, sourceLocation: SourceLocation, () async throws -> Bool) -> Self

    その値が true の場合にテストを無効にする条件特性を構築します。


    static func timeLimit(TimeLimitTrait.Duration) -> Self

    テストの実行時間が長すぎる場合にタイムアウトする時間制限特性を構築します。














    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ