gpt4 book ai didi

在另一个类中使用的 PHPUnit 模拟方法

转载 作者:行者123 更新时间:2023-11-28 21:11:53 25 4
gpt4 key购买 nike

在另一个类中使用了 PHPUnit 模拟方法?示例:

class Main {
function makePayment() {
$pp = new PayPalSOAPSomeClass();
return $pp->doExpressCheckout();
}
}

在测试中我想测试我的主类,模拟 doExpressCheckout() 方法,我没有工作的代码来测试:

public function testStub()    {
$stub = $this->getMock('PayPalSOAPSomeClass');
$stub->expects($this->any())
->method('doExpressCheckout')
->will($this->returnValue(false));
$pp = new Main;
$this->assertEquals(true, $pp->doExpressCheckout());
}

最佳答案

您在测试 Main 类时遇到问题。第一个问题是它在内部创建了一个对象。您需要修改此类以使用依赖注入(inject)。您的 makePayment() 应该接受一个 PayPalSOAPSomeClass 对象。

function makePayment(PayPalSOAPSomeClass $pp)
{
return $pp->doExpressCheckout();
}

在您的主类中,您可以修改它以使用构造函数依赖注入(inject),或 setter 依赖注入(inject),这比 makePayment 更好。然后,您引用内部对象。

例如:

class Main {
private $svc;

// Constructor Injection, pass the PayPalSOAPSomeClass object here
public function __construct($Service = NULL)
{
if(! is_null($Service) )
{
if($Service instanceof PayPalSOAPSomeClass)
{
$this->SetPayPalSOAP($Service);
}
}
}

function SetPayPalSOAP(PayPalSOAPSomeClass $Service)
{
$this->svc = $Service;
}

function makePayment() {
$pp = $this->svc;
return $pp->doExpressCheckout();
}
}

测试:

public function testStub()    
{
$stub = $this->getMock('PayPalSOAPSomeClass');
$stub->expects($this->any())
->method('doExpressCheckout')
->will($this->returnValue(false));
$pp = new Main($stub);
$this->assertEquals(true, $pp->doExpressCheckout());
}

关于在另一个类中使用的 PHPUnit 模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22678187/

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