テストの構造

最も簡単に言えば、テストは特定の振る舞いの結果を確認し、その結果が期待通りであることを確認することを目的としています。 振る舞いは経験的に測定できるものではないため、テストを書くことは難しいことがあります。

「振る舞い」とは、特定の状況や刺激に対してシステムが 反応する方法 のことです。 しかし、何かがどのように、またはなぜ行われたかは、それが 何を 行ったかほど重要ではありません。

テストは次の4つのステップに分けられると考えることができます:

  1. Arrange (準備)

  2. Act (実行)

  3. Assert (検証)

  4. Cleanup (後片付け)

Arrange はテストのためにすべてを準備する段階です。 これは Act 以外のほぼすべてを意味します。 ドミノを並べて、実行が一つの状態変更ステップでその役割を果たせるようにすることです。 これには、オブジェクトの準備、サービスの開始/停止、データベースへのレコードの入力、クエリする URL の定義、まだ存在しないユーザーの資格情報の生成、またはプロセスの完了を待つことなどが含まれます。

Act は、テストしたい振る舞いを開始する単一の状態変更アクションです。 この振る舞いは、テスト対象システム (SUT) の状態を変更するものであり、その結果としての変更された状態を見て、振る舞いについて判断することができます。 これは通常、関数/メソッド呼び出しの形を取ります。

Assert は、その結果の状態を見て、期待通りかどうかを確認する段階です。 ここで、振る舞いが期待通りであるかどうかを判断するための証拠を集めます。 テストの assert は、その測定/観察を行い、それに対して判断を適用する場所です。 何かが緑であるべき場合、assert thing == "green" と言います。

Cleanup は、他のテストがそれによって偶然に影響を受けないように、テストが自分自身を片付ける段階です。

本質的に、テストは最終的に ActAssert のステップであり、Arrange のステップはコンテキストを提供するだけです。 「振る舞い」は ActAssert の間に存在します。