2012-04-26 13 views
3

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

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

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

のDataProviderは、それぞれの属性と一緒にAPIエンティティのリストを提供し、テストを動的に将来の変更があったとき、私たちはメインにテストをせずにすべてのエンティティをテストします。

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

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

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

私は何かが明白でないか、または多分私がいくつかの重要な概念を誤解しているように感じます。

答えて

5

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

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

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

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

関連する問題