Mock-and-Stub-Technologie beim PHP-Unit-Testen

WBOY
Freigeben: 2024-05-06 17:42:01
Original
1103 Leute haben es durchsucht

在 PHP 单元测试中,模拟和桩技术可用于:模拟:使用假对象替换依赖项,控制行为并验证交互。桩:创建专门的假接口,验证依赖项的调用情况。模拟可使用 $this->getMockBuilder() 和 ->getMock() 方法创建,用于设置预期行为和断言。桩可使用 ->see() 方法进行断言。这些技术有助于隔离代码并验证依赖项的交互,如使用 ProductService 模拟検証 calculateTotal() 函数处理数据。

PHP 单元测试中的模拟与桩技术

PHP 单元测试中的模拟与桩技术

在单元测试中,模拟和桩技术对于孤立代码和验证其与依赖项之间的交互非常重要。PHP 中有许多可用的框架和工具来实施这些技术。

模拟

模拟是一种替换实际依赖项的假对象,它允许您控制其行为并验证与它的交互。PHPUnit 中的 $this->getMockBuilder()->getMock() 方法可用于创建模拟对象。

示例:

// 在 $object 中模拟 MyService 类
$mock = $this->getMockBuilder(MyService::class)
    ->disableOriginalConstructor()
    ->getMock();

// 设置 mock 方法的预期行为
$mock->expects($this->once())
    ->method('doSomething')
    ->with('arg1', 'arg2')
    ->willReturn('result');

// 与模拟对象交互并进行断言
$this->assertSame('result', $object->doSomething('arg1', 'arg2'));
Nach dem Login kopieren

桩是一种为实际依赖项创建专用接口的假对象。它允许您验证依赖项是否在预期的情况下被调用。PHPUnit 中的 ->see() 方法可用于进行桩断言。

示例:

// 为 $service 创建二重桩
$stub = $this->createMock(MyService::class);

// 设置实际依赖项,以便稍后断言
$object = new MyObject($stub);

// 与实际对象交互
$object->doSomething();

// 验证桩是否被调用
$this->assertTrue($stub->expects($this->once())
    ->method('doSomething')
    ->with('arg1', 'arg2')
    ->hasBeenCalled());
Nach dem Login kopieren

实战案例:

假设我们有一个函数 calculateTotal(),它从 ProductService 中获取产品数据。我们可以使用模拟技术来隔离 ProductService,并验证 calculateTotal() 是否正确处理数据。

// 使用模拟来验证 calculateTotal()
$productServiceMock = $this->getMockBuilder(ProductService::class)
    ->disableOriginalConstructor()
    ->getMock();

$productServiceMock->expects($this->once())
    ->method('getProducts')
    ->willReturn([
        ['id' => 1, 'price' => 10],
        ['id' => 2, 'price' => 20]
    ]);

$total = calculateTotal($productServiceMock);

$this->assertEquals(30, $total);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonMock-and-Stub-Technologie beim PHP-Unit-Testen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!