需要使用Mockery的一些帮助 - 我想重载一个类,它是在方法中使用new HelperUtil()
创建的。
使用Mockery overload
我可以这样做,但它留给我一个空的shell类。然后,我似乎必须创建所有被调用的方法。有没有办法创建一个重载的完整模拟,然后只更改一个方法?
$mock = \Mockery::mock('overload:'.HelperUtil::class);
$mock->shouldReceive('content')->andReturnUsing(function() {
return 'different content';
});
感谢
编辑: 我想我想这样做:
$mock = \Mockery::mock('overload:'.HelperUtil::class)->shouldDeferMissing();
$mock->shouldReceive('content')->andReturnUsing(function() {
return 'different content';
});
但是仍然没有工作=(
答案 0 :(得分:3)
GitHub上有一个interesting discussion
shouldIgnoreMissing
和shouldDeferMissing
(和其他此类标志 现在和将来)工作,但不是在模拟,而是在实例上 模拟。听起来令人困惑,但这是因为内部原因。
当您执行
m::mock('overload:Foo');
嘲弄时,会创建一个新的 基于Foo
“模板”的名为Mock.php
的课程。那个模板 默认情况下将_mockery_ignoreMissing
标志设置为false。一旦mock方法结束,它就会创建一个重载的
Foo
对象并将其返回给我们。重载的Foo
类也是 可用于实例化新的Foo
个对象。调用
$m->shouldIgnoreMissing()
会在上面设置忽略缺失标志 模拟方法返回的对象。调用
new Foo()
会创建一个Foo
对象的新实例Mock.php
的{{1}}模板默认为false。如果要在新实例上将标志设置为true,则需要调用 该实例上的
_mockery_ignoreMissing
,而不是shouldIgnoreMissing()
。
正如我所看到的,功能“should ignore missing on instance mocks”已经完成,所以你能做的最好就是
$m
我认为$mock = \Mockery::mock('overload:'.HelperUtil::class)->shouldIgnoreMissing();
尚未完成shouldDeferMissing
。
当然,作为一种解决方法,您可以考虑创建一个模拟并注入它。