2017-01-12 1 views
0

クラス内のテストに固有のセットアップがいくつかあります。私のテストに固有なので、私はテスト機能の上に追加しました。クリーンアップは、テスト機能の最後に追加されます。テストが失敗し、クリーンアップが実行されない問題。私のテスト機能に特化したカスタムティアダウンを指定するPHPUnitの方法はありますか?私はteardownAfterClassとtearDownを指定するPHPUnitのマニュアルを見ましたが、どちらも私の問題を解決しません。関数teardownAfterClassは、クラスの最後に1回だけ実行されます。各テストの後に関数teardownが実行されますが、特定のテスト関数が実行されなかった場合、クリーンアップを実行したくありません。phpunit私のテストに特化したカスタムティアダウン

私のテストでカスタムティアダウン機能を作成するPHPUnitの方法は何ですか?

ここでは、テストに固有のクリーンアップが常に発生することを確認するために使用するコードですが、実際のテストを別の関数に入れてtry/catchブロックを必要とするので醜いです。 PHPUnit固有の処理方法はありますか?関数に特有のdataProviderのようなものは素晴らしいでしょう。失敗や成功に関係なく、テストの後に常に実行されます。

class testClass { 

    public function test1() { 
     self::setupSpecificToTest1(); 
     try { 
      // actual test without cleanup 
      $this->_test1(); 

     } catch (Exception $e) { 
      self::cleanupSpecificToTest1(); 
      throw $e; 
     } 
     self::cleanupSpecificToTest1(); 
    } 

    public function test2() { 
     // some code which does not need any setup or cleanup 
    } 

    private function _test1() { 
     // some test code 
    } 
} 
+0

を、あなたはこの方法自体に、あるいは単に手動でクリーンアップメソッドを呼び出すことを扱うほうが良いです。 –

+0

関数の最後に手動でクリーンアップメソッドを呼び出す際の問題は、例外/テストの失敗の場合に呼び出しを取得しないことです。 –

+0

あなたの状況をよりよく扱う方法があるかもしれないので、私はあなたのテストのコードを投稿することをお勧めします。 –

答えて

0

私はこれを試しましたが、それは私のテストの後に私のために働いた。

​​
+0

これはテストごとに実行されます。特定のテストの後でティアダウンを実行する方法はありますか? –

+0

特定のイベントが発生した後など、テスト後にこのメソッドを呼び出すことができます。 –

0

(それがテストを実行するPHPUnitのアプローチに近いです)

をインテリジェントティアダウンを実装あなたはそれに応じてその動作を交互にtearDownメソッド内の特定のテスト名を確認することができます。テスト名の取得は、テストクラスの$this->getName()で行うことができます。

ような何か試してみてください:各テストに固有の動作については

... 
public function test1() { ... } 

public function test2() { ... } 

public function tearDown() 
{ 
    if ($this->getName() === 'test1') 
    { 
     // Do clean up specific to test1 
    } 
    parent::tearDown(); 
} 
関連する問題