単体テストは統一されるべきであるという事実を誰もが共有していることを私は知っています。しかし、この本を読むと、テスト スイートを作成する余地があることがわかります。
Chapter 7. テストの編成 PHPUnit (Chapter 2 を参照) の目標の 1 つは、テストを構成可能にすることです。たとえば、プロジェクト全体のすべてのテストや、プロジェクトの一部であるコンポーネントのすべてのクラスのテスト、または単一のクラスのテストのみ。
例 7.2: XML 構成を使用したテスト スイートの作成
<phpunit>
<testsuites>
<testsuite name="Object_Freezer">
<file>Tests/Freezer/HashGenerator/NonRecursiveSHA1Test.php</file>
<file>Tests/Freezer/IdGenerator/UUIDTest.php</file>
<file>Tests/Freezer/UtilTest.php</file>
<file>Tests/FreezerTest.php</file>
<file>Tests/Freezer/StorageTest.php</file>
<file>Tests/Freezer/Storage/CouchDB/WithLazyLoadTest.php</file>
<file>Tests/Freezer/Storage/CouchDB/WithoutLazyLoadTest.php</file>
</testsuite>
</testsuites>
</phpunit>
テスト依存関係の機能を追加する場合:
依存関係のテスト
単体テストは主に、開発者がバグを特定して修正し、コードをリファクタリングし、テスト対象のソフトウェア ユニットのドキュメントとして機能するのに役立つ優れたプラクティスとして作成されています。これらの利点を実現するために、単体テストは理想的には、プログラム内で可能なすべてのパスをカバーする必要があります。通常、1 つの単体テストは、1 つの関数またはメソッド内の 1 つの特定のパスをカバーします。ただし、テスト メソッドはカプセル化された独立したエンティティである必要はありません。多くの場合、テストの実装シナリオに隠されている、テスト メソッド間に暗黙の依存関係があります。
@depends ClassName::Function を使用して、クラス内またはクラス間で依存関係を使用し、ClassName::Function によって提供されるデータを使用できます。
たとえば、クラス A がクラス B および C でも使用されるデータを提供する場合、次のようになります。
A {
function a()
{
return $data;
}
}
B {
/**
* @depends A::a
*/
function b($data)
{
return $data2;
}
}
C {
/**
* @depends B::b
*/
function c($data2)
{
}
}
なぜそんなに悪いのですか?A::a のコードをクラス B::b に複製し、クラス A::a および B::b からクラス C::c にコードを複製する方が良いですか?
私はあなたの感覚でベストプラクティスを学びたい..以前は常にテストスイートを使用しており、単体テストは独立した機能をテストするのに最適ですが、依存関係に依存するサービス全体をテストする必要がある場合は、もう少し複雑です..誰のテストのためにPHPUnitを完全に破棄しますか?代わりに何をアドバイスしますか?