今回はダミーのオブジェクト
モックオブジェクトを使ったテスト
さて,
<?php
interface Item {
public function getName();
public function getCode();
public function getPrice();
}
しかし,
幸い,
次に,
PHPUnit3のモックオブジェクト生成機能
PHPUnitはPHPのリフレクション機能を使ってモックオブジェクトを生成します。また,
それでは,
モックオブジェクトの生成は,
object getMock($className, [array $methods, [array $arguments, [string $mockClassName]]])
パラメータ | 必須 | 意味 |
---|---|---|
$className | ○ | このクラスのモックオブジェクトを生成する |
array $methods | 生成するメソッド | |
array $arguments | コンストラクタの引数 | |
string $mockClassName | モックオブジェクト自身のクラス名。デフォルトは, |
最も簡単なコードは以下のようになります。
$mock = $this->getMock('Item');
このコードを実行すると内部では以下のようなコードが生成され,
class Mock_Item_fe459e06 extends Item implements PHPUnit_Framework_MockObject_MockObject {
private $invocationMocker;
public function __construct() {
$this->invocationMocker = new PHPUnit_Framework_MockObject_InvocationMocker($this);
}
public function __clone() {
$this->invocationMocker = clone $this->invocationMocker;
}
public function getInvocationMocker() {
return $this->invocationMocker;
}
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher) {
return $this->invocationMocker->expects($matcher);
}
public function verify() {
$this->invocationMocker->verify();
}
}
お気づきの通り,
メソッドを指定してモックオブジェクトを生成する場合,
$mock = $this->getMock('Item', array('getName', 'getCode', 'getPrice'));
内部で生成されるコードは以下のようになり,
class Mock_Item_23571fea extends Item implements PHPUnit_Framework_MockObject_MockObject {
private $invocationMocker;
public function __construct() {
$this->invocationMocker = new PHPUnit_Framework_MockObject_InvocationMocker($this);
}
public function __clone() {
$this->invocationMocker = clone $this->invocationMocker;
}
public function getInvocationMocker() {
return $this->invocationMocker;
}
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher) {
return $this->invocationMocker->expects($matcher);
}
public function verify() {
$this->invocationMocker->verify();
}
public function getName() {
$args = func_get_args();
return $this->invocationMocker->invoke(
new PHPUnit_Framework_MockObject_Invocation($this, "Item", "getName", $args)
);
}
public function getCode() {
$args = func_get_args();
return $this->invocationMocker->invoke(
new PHPUnit_Framework_MockObject_Invocation($this, "Item", "getCode", $args)
);
}
public function getPrice() {
$args = func_get_args();
return $this->invocationMocker->invoke(
new PHPUnit_Framework_MockObject_Invocation($this, "Item", "getPrice", $args)
);
}
}