Ein Scheinobjekt ist ein häufig verwendeter Test-In-In-In-In-Test-Test, mit dem das Verhalten einer Klasse oder Schnittstelle simuliert wird, und kann seinen Rückgabewert genau steuern oder Ausnahmen werfen. Durch das Scheinobjekt können Entwickler die interaktive Logik von Funktionen oder Methoden testen, ohne die tatsächlichen Abhängigkeiten zu instanziieren.
In PHP können Sie die GetMockBuilder -Methode verwenden, um ein Scheinobjekt zu erstellen. Diese Methode akzeptiert die folgenden Parameter:
// Simulation MyInterface Schnittstelle
$mock = $this->getMockBuilder(MyInterface::class)
->getMock();
// Simulation MyClass 类并Simulation其方法
$mock = $this->getMockBuilder(MyClass::class)
->setMethods(['myMethod'])
->getMock();
Nach dem Erstellen eines Mock -Objekts können Sie sein Verhalten über die Methodenmethode konfigurieren, z. B. ein Renditewert oder ein Ausnahme ausführen:
// Konfiguration Mock Objekt zurückkehren 'foo'
$mock->method('getMyMethod')
->willReturn('foo');
// Konfiguration Mock Objekt, Ausnahme auszulegen
$mock->method('myOtherMethod')
->willThrowException(new RuntimeException());
Hier ist ein Beispiel, das zeigt, wie ein Scheinobjekt in Unit -Tests verwendet werden. Angenommen, es gibt eine MyClass -Klasse, die von der MyService -Klasse abhängt:
class MyClass
{
private $myService;
public function __construct(MyService $myService)
{
$this->myService = $myService;
}
public function doSomething(): string
{
return $this->myService->getData();
}
}
Die MyService -Klasse enthält eine GetData -Methode, die die Zeichenfolge "Foo" zurückgibt. Um die MyClass :: Doomethething -Methode zu testen, können Sie das Scheinobjekt verwenden:
class MyClassTest extends PHPUnit_Framework_TestCase
{
public function testDoSomething()
{
// erstellen MyService Mock Objekt
$mockService = $this->getMockBuilder(MyService::class)
->setMethods(['getData'])
->getMock();
// Konfiguration Mock Objektzurückkehren "bar"
$mockService->method('getData')
->willReturn('bar');
// erstellen MyClass Instanz und Injektion Mock Objekt
$myClass = new MyClass($mockService);
// Bejahung MyClass::doSomething zurückkehren "bar"
$this->assertEquals('bar', $myClass->doSomething());
}
}
In diesem Test haben wir das Scheinobjekt von MyService erstellt und seinen Rückgabewert auf "Bar" gesetzt. Dann in die MyClass -Instanz injizieren, und überprüfen Sie schließlich, dass die Interaktion zwischen MyClass und MyService durch Behauptungen korrekt ist.
Durch die Verwendung von Mock -Objekten können Entwickler die Abhängigkeiten und die Geschäftslogik in Unit -Tests effizient überprüfen, ohne sich auf tatsächliche Dienste oder komplexe Umgebungen zu verlassen.