Ich arbeite an Komponententests und versuche, den von einer Klassenfunktion zurückgegebenen Wert zu ersetzen, der an einer anderen Stelle aufgerufen wird, an der meine Einheit getestet wird.So rufen Sie die Klasse :: function auf Mock :: function response
Ich begann zu arbeiten auf Mock
Objekt, das scheint die Lösung für mich zu sein. Hier ist der Code Ich verwende:
<?php
namespace A;
class SomeClass
{
public function doSomething()
{
return 20;
}
}
/**
* @group DaTest
*/
class DaTest extends \PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this
->getMock('A\SomeClass', array('doSomething'))
;
// Configure the stub.
$stub
->expects($this->any())
->method('doSomething')
->willReturn(1)
;
$a = new SomeClass();
var_dump($stub->doSomething)); // Return 1
var_dump($a->doSomething()); // Return 20 -.-'
}
}
Wie man sehen kann ich fühle mich gezwungen, die Mock zu verwenden „1“ zurück zu bekommen. Aber mein Ziel ist es, jede Instanz von SomeClass
Return 1 aber nur für meine Unit-Tests zu machen.
Was fehlt mir? Irgendeine Idee, wie ich das erreichen kann?
Thx.
Edit: genau zu zeigen, was ich versuche ich einen anderen Code bekam zu tun, das ist:
<?php
namespace A;
class SomeClass2
{
public function showSomething()
{
$class = new SomeClass();
// Here print 20, I want it to print 1 in my unit test
echo $class->doSomething();
}
}
Alles, was ich will SomeClass2::showSomething()
drucken 1 in meiner Unit-Test bekommen und 20, wenn ich es nennen in Nicht-Test-Umgebung =)
zu verspotten der Lage sein, Wenn Sie ursprüngliches Verhalten der Funktion verhindern wollen, haben Sie alles richtig –
Nun, ich will '' '$ a-> doSomething()' '' return " 1 "auch, weil in meinem Fall die Funktion, die ich" überschreiben "möchte, nicht direkt in meinem Test aufgerufen wird, sondern im Code einer Funktion meinen Testanruf, damit ich es nicht nachspionieren kann. – LordWeedlle
Die Funktion, die Sie testen möchten, wird möglicherweise nicht korrekt geschrieben. Lassen Sie uns das Beispiel näher an Ihren ursprünglichen Code anpassen. Dann wird es einfacher sein, Ihnen zu helfen –