【发布时间】:2015-05-11 03:49:25
【问题描述】:
我正在尝试使用 PHPUnit 模拟一个简单的特征,但它会导致 FatalError,如果我删除类型提示,它会起作用:传递给 Foo::__construct() 的参数 1 必须是 Psr\Log\ 的实例LoggerTrait,Mock_Trait_LoggerTrait_65811a25_bdddd884 的实例给定
班级:
use Psr\Log\LoggerTrait;
class Foo {
/**
* @var LoggerTrait
*/
private $mLogger;
public function __construct(LoggerTrait $iLogger)
{
$this->mLogger = $iLogger;
}
}
测试:
class FooTest extends \PHPUnit_Framework_TestCase
{
public function testRun ()
{
$logger = $this->getMockForTrait('\Psr\Log\LoggerTrait');
$sut = new Foo($logger);
}
}
我应该如何解决这个问题?
【问题讨论】:
-
我应该如何解决这个问题? 将
LoggerTrait类中的实例传递给构造函数?! -
我发现它也很棘手。如果你做一个 var_dump($logger);在你 getMockForTrait 之后,它是“LoggerTrait”类型的对象吗?您绝对不想删除您的类型提示。那会很糟糕。我解决这个问题的一种方法是在测试助手中创建一个存根 Trait,然后将其提供给 getMockForTrait。很烂,但有效。
标签: php unit-testing mocking phpunit traits