2011-07-18 13 views
19

Piszę testy funkcjonalne dla systemu SOA, więc trzeba przetestować podsystem zaplecza z frontendu.Jakikolwiek sposób na zachowanie zmiennych instancji między testami phpunit?

To standardowy system CRUD. Mam test, który testuje, że mogę utworzyć obiekt, i zwraca mi identyfikator nowego obiektu. W kolejnych testach chcę edytować, a następnie usunąć ten obiekt, ale wydaje się, że phpunit ponownie tworzy instancję klasy testowej, więc tracę zmienne instancji.

Jak mogę to osiągnąć? Uruchamianie testów funkcjonalnych na każdym serwerze w architekturze nie jest opcją.

+3

Jedną rzeczą należy pamiętać, że PHPUnit tworzy nowe wystąpienie twojego przypadku testowego dla każdej metody testowej * przed wykonaniem jakichkolwiek testów. * –

+3

Należy pamiętać o tym, że PHPUnit ma ** zły design ** ... – inf3rno

Odpowiedz

0

Domyślam się, że po prostu uruchomę test "create", zanim uruchomię "edit" lub "delete", i odpowiednio ustaw zmienną instancji.

32

Jednym ze sposobów, aby przejść rzeczy między testami jest użycie @depends Adnotacja

public function testCreate() { 
    //... 
    return $id; 
} 

/** 
* @depends testCreate 
*/ 
public function testDelete($id) { 
    // use $id 
} 

jeśli robisz to tak, że „usunięcie” test zostanie pominięty, jeśli kreacja nie działa.

Pojawi się błąd jeden, jeśli usługa nie działa w ogóle, zamiast wielu nieudanych testów.


Jeśli nie chcesz tego robić lub, że nie pasuje do sprawy z jakiegokolwiek powodu zmiennych statycznych klasy mogą być również opcja, ale powinieneś być pewien, że wiesz, że absolutnie potrzebne:)

+0

Mam dokładnie te same nazwy metod, dla których szukałem rozwiązania: D – Jekis

4

Skoro chcesz uruchomić każdy testcase raz, można przechowywać zmienne instancji na poziomie klasy na przykład w zmiennych statycznych lub w zewnętrznym singleton/globalne sklepu używa get_class($testCase) na klucze ...

Powiązane problemy