単体テストの使用を開始しています。状況があり、続行する方法がわかりません:
例: ファイルを開いて読み取るクラスがあります。私の単体テストでは、open メソッドと read メソッドをテストしたいのですが、ファイルを読み取るには、最初にファイルを開く必要があります。
「ファイルを開く」テストが失敗すると、「ファイルを読み取る」テストも失敗します。
では、オープンが原因で読み取りが失敗したことを明示するにはどうすればよいでしょうか。読み取り内のオープンをテストしますか??
単体テストの使用を開始しています。状況があり、続行する方法がわかりません:
例: ファイルを開いて読み取るクラスがあります。私の単体テストでは、open メソッドと read メソッドをテストしたいのですが、ファイルを読み取るには、最初にファイルを開く必要があります。
「ファイルを開く」テストが失敗すると、「ファイルを読み取る」テストも失敗します。
では、オープンが原因で読み取りが失敗したことを明示するにはどうすればよいでしょうか。読み取り内のオープンをテストしますか??
単体テストの重要な機能は分離です。1 つの特定の単体テストで 1 つの特定の機能をカバーする必要があり、失敗した場合はそれを報告する必要があります。
あなたの例では、read
明らかに機能に依存しopen
ます。後者が壊れている場合、結果がわかっているため、前者をテストする理由はありません。さらに、失敗を報告read
しても、テスト結果に無関係なノイズが追加されるだけです。
read
この場合、報告できる (および報告すべき)ものはtest skipped
、または同様のものです。それがPHPUnitで行われる方法です。たとえば、次のようになります。
class DependencyFailureTest extends PHPUnit_Framework_TestCase
{
public function testOne()
{
$this->assertTrue(FALSE);
}
/**
* @depends testOne
*/
public function testTwo()
{
}
}
ここでは、testOne に依存する testTwo があります。テストを実行すると、次のように表示されます。
There was 1 failure:
1) testOne(DependencyFailureTest)
Failed asserting that <boolean:false> is true.
/home/sb/DependencyFailureTest.php:6
There was 1 skipped test:
1) testTwo(DependencyFailureTest)
This test depends on "DependencyFailureTest::testOne" to pass.
FAILURES!
Tests: 2, Assertions: 1, Failures: 1, Skipped: 1.
説明:
欠陥を迅速に特定するために、関連する失敗したテストに注意を向けたいと考えています。これが、依存するテストが失敗したときに PHPUnit がテストの実行をスキップする理由です。
ファイルを開くことは、ファイルを読み取るための前提条件であるため、テストに含めても問題ありません。ファイルを開くことができなかった場合は、コードで例外をスローできます。テストのエラー メッセージにより、テストが失敗した理由が明確になります。
また、テスト自体でファイルを作成して、既存のファイルへの依存関係を削除することを検討することをお勧めします。こうすることで、常に有効なファイルを参照できるようになります。