【发布时间】:2017-09-01 16:57:43
【问题描述】:
我有一个特点:
trait A {
function foo() {
...
}
}
还有一个使用这种特性的类:
class B {
use A {
foo as traitFoo;
}
function foo() {
$intermediate = $this->traitFoo();
...
}
}
我想测试类的 foo() 方法并想模拟(使用 Mockery)特征的 foo() 方法的行为。我尝试使用部分和嘲笑traitFoo() 喜欢:
$mock = Mockery::mock(new B());
$mock->shouldReceive('traitFoo')->andReturn($intermediate);
但它不起作用。
可以这样做吗?有替代方法吗?我想测试 B::foo() 将其与 trait 的 foo() 实现隔离开来。
提前致谢。
【问题讨论】:
-
如何“它不起作用”。确切地?你在测试中称它为
$mock->foo()吗?一般来说,mock CUT 并不是很推荐。 -
是的,我将其称为
$mock->foo()。它不起作用,因为调用的是真正的特征方法而不是模拟方法。我使用模拟作为 CUT 的代理,并且能够在不依赖在其他地方测试的特征的情况下隔离方法测试。
标签: php unit-testing testing phpunit mockery