依存関係を、たとえばコンテキスト テスト スイートを介して派生したクラスに注入することが可能かどうか疑問に思ってい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;
}
これは、私自身の実装だけでなく、将来の実装 (私が制御していない) でも再利用される可能性があります。
特にインターフェースに大きく依存しているプロジェクトでは、これはどのように可能ですか? 抽象的なテストを書いて、実装ごとに拡張したくはありません -
ありがとう!