0
私はPHPユニットテストを学んでいます。私は質問をした。メソッドからプロパティ値を設定する方法は?ここに私のコード例は次のとおりです。それは公共のだからPHPユニットテスト偽装メソッドのプロパティを設定
$mock->date = new \DateTime();
:上記のコードで
class Variables
{
public $date;
public function setDate(\DateTime $date) {
$this->date = $date;
}
}
class Process
{
public function process(Variables $var) {
if ($var->date->getTimeStamp() > 0) {
return 'success';
}
return 'failed';
}
}
class ProcessTest extends PHPUnit_Framework_TestCase
{
public function testProcess()
{
$mock = \Mockery::mock('Variables');
$mock->date = new \DateTime();
$procy = new Process();
$actual = $procy->process($mock);
$this->assertEquals('success', $actual);
}
}
のように、私が知っている、私はしてプロパティdate
を設定することができます。
プロパティdate
がプライベートか保護されている場合はどうなりますか?どのように嘲笑から設定するには?このようなことをやろうとしましたが、エラーが発生しました。私の質問を説明し
$mock->shouldReceive('setDate')->once()->andSet('date', new \DateTime());
Sampleクラスは:
class Calculation {
protected $a;
protected $b;
protected $c;
public function __construct() {
;
}
public function setA($a) {
$this->a = $a;
}
public function setB($b) {
$this->b = $b;
}
public function call() {
$this->c = (int) $this->a + (int) $this->b;
}
public function getC() {
return $this->c;
}
}
私はあなたのアドバイスを必要としています。
しかし私のクラスにはメソッド 'getDate'はありません。もし私が持っていれば、おそらく '$ mock-> shouldReceive( 'getDate') - > andReturn($ date);' – kelaskakap
を実行するだけです。 'setDate()'が '$ date '、@kelaskakap。あなたのテストで重要でない場合は、それに対する期待を設定する必要はありません。 – localheinz
はい私は 'setDate'メソッドからの期待は必要ありません。私はちょうど、知ってほしい、どのようにユニットテストでMockeryを使用して 'setDate'メソッドからプロパティ' date'(プライベートか保護されているか)を設定する方法です。私のクラスにはメソッド 'getDate'がありません。 – kelaskakap