我想知道是否可以将依赖项注入到PHPUnit_Framework_TestCase
通过例如某些上下文测试套件派生的类中 - 以一种 PHPUnit 可以处理的方式,无论它是手动调用的,还是使用phpunit.xml
配置文件还是其他方式?
请考虑以下示例:
<?php
interface AnyGreeter {
public function greet($recipient);
}
class FriendlyGreeter implements AnyGreeter {
public function greet($recipient) {
return "Hello {$recipient}!";
}
}
class DorkGreeter implements AnyGreeter {
public function greet($recipient) {
return "Get lost, {$recipient}!";
}
}
现在我想为实现的类提供一些通用测试AnyGreeter
,例如:
<?php
class GeeterTest extends PHPUnit_Framework_TestCase {
public function testGreet() {
$greeter = $this->getGreeter();
$message = $greeter->greet("world");
$this->assertContains("world", $message);
}
public function setGreeter(AnyGreeter $greeter) {
$this->greeter = $greeter;
}
public function getGreeter() {
if (null === $this->greeter) {
$this->markTestSkipped("No greeter provided");
}
return $this->greeter;
}
private $greeter;
}
这可能会被我自己以及任何未来的实现(我无法控制)重新使用。
这怎么可能,尤其是在一个严重依赖接口的项目中?我不想为每一个实现编写抽象测试并扩展它们——
谢谢!