来自另一个类的 PHPUnit 模拟方法
Posted
技术标签:
【中文标题】来自另一个类的 PHPUnit 模拟方法【英文标题】:PHPUnit mock method from another class 【发布时间】:2022-01-04 20:25:28 【问题描述】:使用 phpUnit 6.5.14,我正在尝试测试一种方法。为此,需要模拟其依赖项之一;但是我无法让它工作。这是一个精简版:
class Order
public function create()
$CCP = new CreditCardProcessor();
$success = $CCP->chargeCreditCard();
return $success;
class CreditCardProcessor
public function chargeCreditCard()
return false;
class OrderTest extends TestCase
public function testCreate()
$mockCCP = $this->getMockBuilder(CreditCardProcessor::class)
->setMethods(['chargeCreditCard'])
->getMock();
$mockCCP
->method('chargeCreditCard')
->willReturn(true);
$O = new Order();
$success = $O->create();
$this->assertTrue($success, 'Was not able to create order.');
我已阅读文档并查看了一些示例,但无法弄清楚。任何想法我做错了什么?谢谢。
【问题讨论】:
【参考方案1】:在找到更多示例后,我认为解决方案是将依赖项作为参数传递给create
:
class Order
public function create($CCP)
$success = $CCP->chargeCreditCard();
return $success;
然后我可以在我的测试中做同样的事情:
class OrderTest extends TestCase
public function testCreate()
$mockCCP = $this->getMockBuilder(CreditCardProcessor::class)
->setMethods(['chargeCreditCard'])
->getMock();
$mockCCP
->method('chargeCreditCard')
->willReturn(true);
$O = new Order();
$success = $O->create($mockCCP);
$this->assertTrue($success, 'Was not able to create order.');
我还没有尝试过,但应该可以。
我不喜欢更改代码以满足测试的想法,但这可能也表明我需要重组我的代码。
【讨论】:
以上是关于来自另一个类的 PHPUnit 模拟方法的主要内容,如果未能解决你的问题,请参考以下文章