对于单元测试,我通过以下方式创建一个模拟对象:
$passenger = M::mock(PassengerInterface::class);
我将此模拟传递到要进行单元测试的服务中。该服务正在尝试访问一个未定义的方法,因此通过以下方式导致了预期的失败:
[BadMethodCallException] Method Mockery_3_Dreamlines_BookingService_Bundle_Bundle_Entity_PassengerInterface::isInfant() does not exist on this mock object
因此,我通过
在模拟对象上定义了方法$passenger = M::mock(PassengerInterface::class)->shouldReceive('isInfant')->andReturn(false);
然而,这通过以下方式意外地使测试失败了:
[PHPUnit_Framework_Exception] Argument 2 passed to Dreamlines\BookingService\Bundle\Bundle\Operator\ResponseModifier\InfantPriceModifier::adjustPrice()
must implement interface Dreamlines\BookingService\OperatorBundle\Entity\PassengerInterface,
Mockery\CompositeExpectation given
我在做什么错了?
答案 0 :(得分:0)
您使用的流利语法不正确。
Mockery的andReturn
不会返回模拟对象,而是期望值。您应该创建一个实例,对其进行变异,然后使用修改后的实例:
$passenger = M::mock(PassengerInterface::class); // creates the mock
$passenger->shouldReceive("isInfant")->andReturn(false); // this returns an expectation, let's ignore that return value
// now you can use $passenger as expected