Php 模拟试验特性与模拟方法
我尝试用两种方法对一个特征进行单元测试。我想断言Php 模拟试验特性与模拟方法,php,unit-testing,testing,mockery,Php,Unit Testing,Testing,Mockery,我尝试用两种方法对一个特征进行单元测试。我想断言foo的结果,它调用trait中的另一个方法: <?php trait Foo { public function foo() { return $this->anotherFoo(); } public function anotherFoo() { return 'my value'; } } /** @var MockInterface|Foo */ $mock
foo
的结果,它调用trait中的另一个方法:
<?php
trait Foo {
public function foo() {
return $this->anotherFoo();
}
public function anotherFoo() {
return 'my value';
}
}
/** @var MockInterface|Foo */
$mock = Mockery::mock(Foo::class);
$mock
->makePartial()
->shouldReceive('anotherFoo')
->once()
->andReturns('another value');
$this->assertEquals('another value', $mock->foo());
这通常是可能的吗?我不认为你可以直接嘲笑这种特质。似乎有效的方法是做同样的事情,但使用一个使用该特性的类。例如,创建一个使用
Foo
的testBar
类,然后对其进行部分模拟。这样,您使用的是一个真正的类,Mockcry似乎很乐意覆盖trait方法
trait Foo {
public function foo() {
return $this->anotherFoo();
}
public function anotherFoo() {
return 'my value';
}
}
class Bar {
use Foo;
}
/** @var MockInterface|Bar */
$mock = Mockery::mock(Bar::class);
$mock
->makePartial()
->shouldReceive('anotherFoo')
->once()
->andReturns('another value');
$this->assertEquals('another value', $mock->foo());