Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 模拟试验特性与模拟方法_Php_Unit Testing_Testing_Mockery - Fatal编程技术网

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
的test
Bar
类,然后对其进行部分模拟。这样,您使用的是一个真正的类,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());