mmm*_*mmm 5 php phpunit symfony
我一直在测试、添加和删除线路以查看问题出在哪里。我已经设法剪掉了很多行,基本上我的测试看起来像这样(当然要看看出了什么问题,我知道这不是正确的测试):
public function test()
{
$invoice = new Invoice();
$invoiceRepository = $this
->getMockBuilder('\Doctrine\ORM\EntityRepository')
->disableOriginalConstructor()
->getMock();
$invoiceRepository->expects($this->once())
->method('findOneByNextNote')
->will($this->returnValue($invoice));
$invoiceRepository->findOneByNextNote();
}
Run Code Online (Sandbox Code Playgroud)
但仍然不起作用!我从标题中收到一个错误:
当调用 1 次时,方法名称的预期失败等于 < string:findOneByNextNote >。方法预计被调用 1 次,实际调用 0 次。
我缺少什么?
有时,当您在“expects()”指令之前调用该方法时,会出现这种误解。所以代码看起来很棒但没有工作。
不好的例子:
$mock = $this
->getMockBuilder(YourClass::class)
->setMethods(['emit'])
->getMock();
$mock->emit();
$mock->expects($this->once())->method('emit');
//Method was expected to be called 1 times, actually called 0 times.
Run Code Online (Sandbox Code Playgroud)
好的例子:
$mock = $this
->getMockBuilder(YourClass::class)
->setMethods(['emit'])
->getMock();
$mock->expects($this->once())->method('emit');
$mock->emit();
Run Code Online (Sandbox Code Playgroud)
您可以指定要模拟的方法(而不是整个类),以便模拟该类的行为,因此仅模拟您要测试的方法,如下所示:
public function testFindOne()
{
$invoice = new Invoice();
$invoiceRepository = $this
->getMockBuilder('\Doctrine\ORM\EntityRepository')
->setMethods(array('findOneByNextNote'))
->disableOriginalConstructor()
->getMock();
$invoiceRepository->expects($this->once())
->method('findOneByNextNote')
->will($this->returnValue($invoice));
$invoiceRepository->findOneByNextNote();
}
Run Code Online (Sandbox Code Playgroud)
所以断言按预期工作
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
12250 次 |
| 最近记录: |