2008-09-12 10 views
3

私が取り組んでいるウェブサイトをPHPUnitでテストする方法を学び始めています。私が実行している問題は、5つの異なるユーザータイプが定義されていることです。さまざまなタイプのすべてのクラスをテストできるようにする必要があります。私は現在ユーザークラスを持っていますが、これを各関数に渡したいと思いますが、これを渡す方法や正しいかどうかのエラーをテストする方法を理解することはできません。PHPUnitで複数のユーザタイプを持つウェブサイトをテストする最善の方法

編集:私は言ったでしょう。ユーザークラスがあり、このクラスの別のインスタンスを各単体テストに渡したいと思います。

答えて

2

さまざまなユーザークラスが親ユーザークラステストケースクラスに同じ継承構造を使用することをお勧めします。あなたのテストケースクラスで、次の操作を行うことができ

class User 
{ 
    public function commonFunctionality() 
    { 
     return 'Something'; 
    } 

    public function modifiedFunctionality() 
    { 
     return 'One Thing'; 
    } 
} 

class SpecialUser extends User 
{ 
    public function specialFunctionality() 
    { 
     return 'Nothing'; 
    } 

    public function modifiedFunctionality() 
    { 
     return 'Another Thing'; 
    } 
} 

は、次のサンプルのクラスを検討し、各テストは、あなたがオーバーライドすることができます作成​​方法に依存しているため

class Test_User extends PHPUnit_Framework_TestCase 
{ 
    public function create() 
    { 
     return new User(); 
    } 

    public function testCommonFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Something', $user->commonFunctionality); 
    } 

    public function testModifiedFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('One Thing', $user->commonFunctionality); 
    } 
} 

class Test_SpecialUser extends Test_User 
{ 
    public function create() { 
     return new SpecialUser(); 
    } 

    public function testSpecialFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Nothing', $user->commonFunctionality); 
    } 

    public function testModifiedFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Another Thing', $user->commonFunctionality); 
    } 
} 

を、と理由テストメソッドは親テストクラスから継承され、期待される動作を変更するためにオーバーライドしない限り、親クラスのすべてのテストは子クラスに対して実行されます。

これは私の限られた経験で素晴らしい仕事をしています。

1

実際のUIをテストする場合は、Selenium(www.openqa.org)のようなものを試してみてください。これは、PHPでコードを書くことができます(phpUnitで動作すると仮定しています)。ブラウザを駆動するには...

もう1つの方法は、各ユーザの種類ごとに呼び出すことができる共通の方法です。つまり、TestAdminUserまたはTestRegularUserから呼び出すことができる「ValidatePage」のようなもので、メソッドは単にあなたが期待しているのと同じ基本的な検証を実行します。

1

アンチパターンがここに入っていないことを確認してください。あなたはコンストラクタであまりにも多くの作業をするでしょうか?あるいは、これらは実際に異なるクラスでなければならないでしょうか?テストでは、多くの場合、コードの設計についての手がかりが与えられます。それに耳を傾けてください。

関連する問題