2015-11-20 5 views
5

Kann ich irgendwie sollte Rückgabewert für bestimmte sollte Receive?Update Spott andReturn

Zum Beispiel habe ich mehrere Tests, die einen Rückgabewert verwenden, und nur einen, der einen anderen Rückgabewert verwendet.

So habe ich dies in setUp setzen:

$this->someDependency->shouldReceive('someMethod')->andReturn(0); 

Wenn ich diesen Fall in diesem spezifischen Probe gestellt:

$this->someDependency->shouldReceive('someMethod')->andReturn(1); 

Es wird ignoriert und 0 zurückgegeben.

Ich "fixierte" diese bewegende Mocking zu allen Tests und Entfernen von Setup. Aber ich mag diese Code-Duplizierung nicht.

+0

Welches ist der Diskriminator, um zu bestimmen, wann 1 anstelle von 0 zurückgegeben wird? Ist das möglich durch method argument data? Wenn ja, überprüfe die 'with()' Methode – Matteo

+1

Eigentlich rufe ich diese Methode ohne Argumente auf. Diese Abhängigkeit ist das Doktrin-Repository und diese Zählmethode, weshalb ich unabhängig von den Argumenten mehr als einen Wert haben kann. –

+0

Haben Sie versucht, die 'andReturn (value1, value2, ...)' Methode zu verwenden, wie sie in der [Mockery docs] (http://docs.services.io/en/latest/reference/expectations.html) –

Antwort

2

Dies ist meist eine Frage des Stils. Sie können in einer Hilfsfunktion, die vom Test aufgerufen wird, auf einfache Weise eine 'Standard'-Menge von Mocks erstellen und dann eine explizitere alternative Version, die sie anders einrichtet.

Sie könnte auch, in diesem Helfer, haben einen Funktionsparameter für einen gegebenen Wert von einem bestimmten Schein zurückzukehren.

Einige Leute glauben, dass jeder Test völlig unabhängig voneinander sein sollte, abgesehen von einigen sehr allgemeinen Einstellungen, und sollte alles in sich selbst tun. Dies macht es deutlich, was vor sich geht (was sehr klar und offensichtlich ist, was vor sich geht) - aber zu möglichen Kosten der Code-Duplizierung. Das ist jedoch Ihre Wahl, wenn Sie sich nicht zu sehr wiederholen möchten.

+0

Dank Alister, Sie haben Recht mit unabhängigen Tests. Aber vielleicht gibt es eine Möglichkeit, shouldReceive in Spott zu aktualisieren, deshalb markiere ich diese Antwort nicht als akzeptiert. –