3

API を開発していますが、いくつかのテストケースを書くのに問題があります。すべてのエンティティをテストするための一般的なテストケースのグループを既に作成しています。これらには、作成、変更、削除などの一般的な操作が含まれます。

/**
 * @dataProvider provideCreateData
 * @depends LoginTest::testLogin
 */
public function testCreate

 /**
 * @dataProvider provideModifyData
 * @depends testCreate
 */
function testModify

データプロバイダーは、API エンティティのリストとそれぞれの属性を提供します。テストは、将来の変更がある場合にテストをメインにすることなく、すべてのエンティティを動的にテストします。

上記は現在正常に動作しますが、一般的なパターンに従わない検索関数など、ハードコードされている他の必要なテストを統合するのに問題があります。明らかに、既存のエンティティなしで検索機能をテストすることはできません。そのため、作成テストの後に検索テストを実行する必要がありますが、これには問題があります。私は使用してみました:

 /**
 * @depends GeneralTest::testCreate 
 */
public function testFind() {}

これは機能しません。テストは実行されず、代わりに明らかな理由もなくスキップされます。ただし、依存関係を削除するとテストが実行されますが、データベースにエンティティが存在することを保証できなくなります。

明らかな何かが欠けているように感じます。または、重要な概念を誤解している可能性があります。

4

1 に答える 1

5

消費者テストがスキップされる理由はいくつかあります。

  1. 「testFind」は「GeneralTest::testCreate」の前に定義されています。PHPUnit は、依存関係を助けるために実行順序を変更しません。それはあなた次第です。
  2. 「GeneralTest::testCreate」のアサーションが失敗しました。アサーションが失敗した場合、依存関係が満たされていないため、メソッドはスキップされます。

本当に必要な場合にのみ @depends を使用してください。各テスト メソッドで特定の実行パスをテストするように努める必要があります。その依存関係が必要だと思われる場合は、テストの順序を制御できるようにテスト スイートを構成する必要があります。

https://phpunit.de/manual/3.7/en/organizing-tests.html#organizing-tests.xml-configuration

于 2012-04-26T13:24:42.627 に答える