gpt4 book ai didi

php - 如何跨多个测试在 PHPUnit 中模拟测试 Web 服务?

转载 作者:可可西里 更新时间:2023-10-31 22:15:27 25 4
gpt4 key购买 nike

我正在尝试使用 PHPUnit 测试 Web 服务接口(interface)类。基本上,此类调用 SoapClient 对象。我正在尝试使用此处描述的 getMockFromWsdl 方法在 PHPUnit 中测试此类:

http://www.phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubbing-and-mocking-web-services

但是,由于我想测试同一个类中的多个方法,每次设置对象时,我还必须设置模拟 WSDL SoapClient 对象。这导致抛出 fatal error :

Fatal error: Cannot redeclare class xxxx in C:\web\php5\PEAR\PHPUnit\Framework\TestCase.php(1227) : eval()'d code on line 15

如何在多个测试中使用同一个模拟对象,而不必每次都从 WSDL 重新生成它?这似乎是问题所在。

--

已被要求发布一些代码以供查看,这是 TestCase 中的设置方法:

protected function setUp() {
parent::setUp();

$this->client = new Client();

$this->SoapClient = $this->getMockFromWsdl(
'service.wsdl'
);

$this->client->setClient($this->SoapClient);
}

最佳答案

这不是一个理想的解决方案,但是在您的设置中为 SOAP 模拟提供一个“随机”类名,例如

$this->_soapClient = $this->getMockFromWsdl( 'some.wsdl', 'SoapClient' . md5( time().rand() ) );

这至少可以确保在调用设置时不会出现该错误。

关于php - 如何跨多个测试在 PHPUnit 中模拟测试 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com