我正在学习php单元测试。我有疑问;如何从方法设置属性值?这是我的示例代码:
chomp($line);
my @fields = split(/\t/, $line, -1);
if ($fields[0] ne "") {
$key = join(';', @fields);
next;
}
my (undef, $item, $group, $colinfo) = @fields;
$hash->{$key}{$item} = [ $group, $colinfo ];
与上面的代码一样,我知道,我可以通过以下方式设置属性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
因为它是公开的。
如果属性$mock->date = new \DateTime();
是私有的还是受保护的,该怎么办?如何设置嘲弄?我试图做这样的事情,但是出了个错误。
date
描述我的问题的示例类:
$mock->shouldReceive('setDate')->once()->andSet('date', new \DateTime());
我需要你的建议。
答案 0 :(得分:0)
您可能会向Variables
添加一个访问者,在Process::process()
中使用它而不是访问public
属性,因此,您必须设置一个期望访问者是调用Process::process()
时调用:
$date = new \DateTime();
$variables = \Mockery::mock('Variables');
$variables->shouldReceive('getDate')->withNoArgs()->andReturn($date);
$process = new Process();
$this->assertSame('success', $process->process($variables));
供参考,见: