私は非常に単純なphpインターフェースを持っています:
interface HasFormattableNumber {
function setNumber();
function setFormat();
function formatNumber();
}
次に、このインターフェイスを実装する多くのクラスがあります。残念ながら、これらのクラスは共通の祖先を持つことはできません (おそらく、これらのメソッドを 1 回だけ実装する抽象クラス)。クラスは基本的に次のようになります。
class A implements HasFormattableNumber {
private $_number;
private $_format;
public function setNumber($n) {
$this->_number = $n;
}
public function setFormat($f) {
$this->_format = $f;
}
public function formatNumber() {
return sprintf($this->_format, $this->_number);
}
}
単体テストは次のようになります。
class ATest extends \PHPUnit_Framework_TestCase {
public function testShouldFormatNumber() {
$a = new A();
$a->setNumber(123);
$a->setFormat("xx-%d");
$this->assertEquals("xx-123", $a->formatNumber());
}
}
このテスト ケースをすべてのインターフェイス実装に何らかの方法で再利用することは可能ですか? testShouldFormatNumber() をコピーしてすべての単体テストに貼り付けられることはわかっていますが、できれば 1 か所にまとめておくことをお勧めします。
PHP Traits は何らかの形で役立ちますか? (ただし、まだphp 5.4を使用していません)