Frage

Ich habe alten Code, die Verwendung TDD Ball hielt jetzt möchte ich einen Test für eine Funktion schreiben, die wie folgt aussieht

function somefunction($someargs){
    // do a few checks on $someargs
    $database = new DB_PG();
    $result = $database->select($query);
    // do some changes on result
    return $result;
}

da im nicht viel mit phpunit und Tests im Allgemeinen expirienced meine Frage ist: Wie kann ich DB_PG verspotten? Ich habe versucht, getMock () in meinem Test, aber da die Funktion „neu“ verwendet eine Instanz zu erhalten mein Mock-Objekt ignoriert wird, was Sinn

macht

so sehe ich nur zwei Optionen

  1. einige Funktionen von phpunit ich weiß nicht - was der Grund, warum ich frage ist hier ^^
  2. Ich habe den alten Code zu ändern - was ich weiß, wäre besser

so, jemand weiß eine Antwort für die Option 1?

thx all

War es hilfreich?

Lösung

1

Können Sie die Funktion wie folgt ändern arbeiten:

function someFunc($existingArgs, $db = null)
{
    $db = (is_null($db)) = new DB_PG();
    $result = $db->select($query)

    $return $result;
}

Auf diese Weise können in einem DB-Instanz übergeben kann, auf diese Weise können Sie zumindest Test diese Funktion in Zukunft Sie Dinge Refactoring kann, so dass someFunc Arbeiten Modelle ist, und die db Last Material geschieht über eine dao / repository / Fabrik .

2

Wenn DB_PG nicht bereits eingezogen über eine benötigen / include in der Datei, in der diese Funktion lebt, können Sie eine Dummy-Klasse in Ihrer Testklasse definieren

class DB_PG
{
    public function select($query)
    {
        //use phpunit's libs to output a mock object, you'll need to use the PHPUnit_Framework_Mock::generate() static method, I think that's the name.
        return $mockResult;
    }
}

Auf diese Weise können Sie steuern, was mit dem Ergebnis passiert.

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