2011-07-18 10 views
19

私はSOAシステムの機能テストを書いていますので、フロントエンドからバックエンド・サブシステムをテストする必要があります。phpunitテスト間でインスタンス変数を保持する方法はありますか?

これは標準のCRUDシステムです。私は、オブジェクトを作成することができるテストをテストして、それは私に新しいオブジェクトのIDを返します。その後のテストでは、このオブジェクトを編集して削除したいのですが、phpunitは毎回テストクラスをインスタンス化しているようですので、インスタンス変数は失われます。

どうすればこの問題を解決できますか?アーキテクチャ内の各サーバーで機能テストを実行することは選択肢ではありません。

+3

一つのことにPHPUnitはテストを実行する前に、各テストメソッド*のテストケースの新しいインスタンスを作成します* –

+3

念頭に置くべきことの一つは、PHPUnitに**悪いデザイン**があることです。... – inf3rno

答えて

0

私は '編集'または '削除'を実行する前に '作成'テストを実行し、それに応じてインスタンス変数を設定すると思います。テストの間のものを渡すために

32

一つの方法は、あなたが作成が動作しない場合は「削除」テストがスキップされることのようにそれを行う場合@depends注釈

public function testCreate() { 
    //... 
    return $id; 
} 

/** 
* @depends testCreate 
*/ 
public function testDelete($id) { 
    // use $id 
} 

を使用することです。

多くの失敗したテストの代わりにサービスが全く機能しない場合は、1つだけエラーが発生します。


あなたがそれをするか、それが何らかの理由で静的クラス変数のためのあなたのケースと一致していませんしたくない場合もオプションにすることができますが、あなたは絶対にそれらを必要と知っていることを本当に確認する必要があります: )

+0

私は、私が解決策を探していたものと全く同じメソッド名を持っています:D – Jekis

4

一度、各テストケースを実行したいので、あなたがキーのget_class($testCase)を使用して静的変数では例えば、または外部のシングルトン/グローバルストアにクラスレベルのインスタンス変数を格納することができます...

関連する問題