3

PHPUnit を使用して、作業中の Web サイトをテストする方法を学び始めています。私が直面している問題は、5 つの異なるユーザー タイプが定義されており、すべてのクラスを異なるタイプでテストできる必要があることです。私は現在ユーザークラスを持っており、これを各関数に渡したいのですが、これを渡す方法や、正しいかどうかとして戻ってくる可能性のあるさまざまなエラーをテストする方法がわかりません。

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

4

3 に答える 3

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);
    }
}

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

これは私の限られた経験の中でうまくいきました。

于 2008-09-15T14:33:08.073 に答える
1

ここでアンチパターンに遭遇していないことを確認してください。多分あなたはコンストラクタであまりにも多くの仕事をしますか? それとも、これらは実際には異なるクラスであるべきでしょうか? 多くの場合、テストはコードの設計に関する手がかりを与えてくれます。あの人達の話を聞いて。

于 2008-09-17T12:46:23.227 に答える
1

実際の UI をテストする場合は、Selenium (www.openqa.org) などを使用してみてください。PHP でコードを記述して (これは phpUnit で動作すると想定しています)、ブラウザーを駆動できます。

別のアプローチは、異なるユーザー タイプの各テストで呼び出すことができる共通のメソッドを用意することです。つまり、'ValidatePage' のようなもので、TestAdminUser または TestRegularUser から呼び出すことができ、そのメソッドに、期待するものと同じ基本的な検証を単純に実行させることができます。

于 2008-09-12T13:38:57.747 に答える