Mock-Objekten in PHPUnit zu emulieren Statische Methode Aufrufe?

Ich versuche zum testen einer Klasse, die es schafft Daten-Zugriff in der Datenbank (Sie wissen, CRUD, im wesentlichen). Die DB-library die wir verwenden dazu ein API, wobei Sie zuerst das table-Objekt durch einen statischen Aufruf:

function getFoo($id) {
  $MyTableRepresentation = DB_DataObject::factory("mytable");
  $MyTableRepresentation->get($id);
  ... do some stuff
  return $somedata
}

...Sie bekommen die Idee.

Versuchen wir testen diese Methode, aber Sie verspotten die DataObject-Zeug, so dass (a) wir brauchen eine tatsächliche db-Verbindung für den test, und (b) die wir nicht einmal brauchen, um die DB_DataObject lib für den test.

Jedoch in PHPUnit ich kann nicht scheinen, um $dies->getMock (), um entsprechend einrichten einer statischen Aufruf. Ich habe...

        $DB_DataObject = $this->getMock('DB_DataObject', array('factory'));

...aber der test sagt noch unbekannte Methode "Fabrik". Ich weiß, es ist das Objekt erstellt haben, denn bevor er sagte, es konnte nicht finden, dass DB_DataObject. Jetzt kann es. Aber keine Methode?

Was ich wirklich tun wollen ist, mit zwei mock-Objekte, eines für das table-Objekt zurückgegeben, wie gut. Also, nicht nur muss ich angeben, dass factory ist ein statischer Aufruf, aber auch, dass es gibt einige bestimmte andere mock-Objekt, dass habe ich schon eingerichtet.

Sollte ich noch erwähnen, da ein Nachteil, dass ich Tat dies in SimpleTest eine Weile her (nicht den code) und es funktionierte gut.

Was gibt?

[UPDATE]

Bin ich angefangen zu begreifen, dass es etwas damit zu tun hat erwartet, dass()

InformationsquelleAutor Sam McAfee | 2008-12-05
Schreibe einen Kommentar