PHPUnit9.0 测试替身-对 Web 服务(Web Services)进行上桩或模仿
2022-03-22 14:45 更新
当应用程序需要和 web 服务进行交互时,会想要在不与 web 服务进行实际交互的情况下对其进行测试。为了给 web 服务创建桩件或仿件,可以像使用 getMock()
那样使用 getMockFromWsdl()
。唯一的区别是 getMockFromWsdl()
所返回的桩件或者仿件是基于以 WSDL 描述的 web 服务,而 getMock()
返回的桩件或者仿件是基于 PHP 类或接口的。
示例 8.20 展示了如何用 getMockFromWsdl()
来对(例如)GoogleSearch.wsdl
中描述的 web 服务上桩。
示例 8.20 给 web 服务上桩
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class GoogleTest extends TestCase
{
public function testSearch(): void
{
$googleSearch = $this->getMockFromWsdl(
'GoogleSearch.wsdl', 'GoogleSearch'
);
$directoryCategory = new stdClass;
$directoryCategory->fullViewableName = '';
$directoryCategory->specialEncoding = '';
$element = new stdClass;
$element->summary = '';
$element->URL = 'https://phpunit.de/';
$element->snippet = '...';
$element->title = '<b>PHPUnit</b>';
$element->cachedSize = '11k';
$element->relatedInformationPresent = true;
$element->hostName = 'phpunit.de';
$element->directoryCategory = $directoryCategory;
$element->directoryTitle = '';
$result = new stdClass;
$result->documentFiltering = false;
$result->searchComments = '';
$result->estimatedTotalResultsCount = 3.9000;
$result->estimateIsExact = false;
$result->resultElements = [$element];
$result->searchQuery = 'PHPUnit';
$result->startIndex = 1;
$result->endIndex = 1;
$result->searchTips = '';
$result->directoryCategories = [];
$result->searchTime = 0.248822;
$googleSearch->expects($this->any())
->method('doGoogleSearch')
->will($this->returnValue($result));
/**
* $googleSearch->doGoogleSearch() 现在会返回桩结果,
* 并不会调用 web 服务的 doGoogleSearch() 方法。
*/
$this->assertEquals(
$result,
$googleSearch->doGoogleSearch(
'00000000000000000000000000000000',
'PHPUnit',
0,
1,
false,
'',
false,
'',
'',
''
)
);
}
}
以上内容是否对您有帮助:
更多建议: