Frage

Ich fange an zu lernen, wie PHPUnit zu verwenden, um die Website zu testen, ich arbeite. Das Problem, das ich in laufen lasse, ist, dass ich fünf verschiedene Benutzertypen definiert haben, und ich muss in der Lage jede Klasse mit den verschiedenen Typen zu testen. Im Moment habe ich eine Benutzerklasse, und ich möchte diese an jede Funktion zu übergeben, aber ich kann nicht herausfinden, wie diese passieren oder die verschiedenen Fehler testen, die als korrekt oder nicht zurückkommen konnte.

Bearbeiten: ich hätte sagen sollen. Ich habe eine Benutzerklasse, und ich möchte eine andere Instanz dieser Klasse zu jeder Einheit Test bestehen.

War es hilfreich?

Lösung

Wenn Ihre verschiedenen Benutzerklassen von einem übergeordneten Benutzerklasse erben, verwenden Sie dann empfehle ich Ihnen die gleiche Vererbungsstruktur für Testfall-Klassen.

Beachten Sie die folgenden Beispielklassen:

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

Sie können wie folgt vorgehen mit Ihrem Testfall-Klassen:

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

Da jeder Test an einer Methode erstellen abhängt, die Sie überschreiben können, und da die Prüfmethoden von der übergeordneten Testklasse vererbt werden, alle Tests für die Elternklasse wird gegen das Kind Klasse ausgeführt werden, wenn Sie sie überschreiben die sich ändern erwartetes Verhalten.

Das ist in meiner begrenzten Erfahrung hat gut funktioniert.

Andere Tipps

Wenn Sie suchen die tatsächliche UI zu testen, können Sie versuchen, so etwas wie Selen verwendet, könnte (www.openqa.org). Damit können Sie den Code in PHP schreiben (was ich mit PHPUnit funktionieren würde, gehe mal davon aus), um den Browser zu fahren ..

Ein weiterer Ansatz wäre, eine gemeinsame Methode zu haben, die von jedem Test für Ihren verschiedenen Benutzertyp genannt werden könnten. dh so etwas wie ‚ValidatePage‘, die Sie dann von TestAdminUser oder TestRegularUser und haben das Verfahren einfach erfüllen die gleiche grundlegende Überprüfung dessen, was Sie erwarten, nennen könnte ..

So stellen Sie sicher, dass Sie laufen nicht in ein anti-Muster hier. Vielleicht haben Sie zu viel Arbeit im Konstruktor? Oder vielleicht sollte diese in verschiedenen Klassen Tatsache sein? Tests oft geben Ihnen Hinweise auf Entwurf von Code. auf sie hören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top