有没有办法模拟一个类并使用常规类构造?

时间:2014-11-16 09:22:21

标签: wordpress unit-testing phpunit mockery

背景:我还在学习使用模拟并试图测试WordPress插件。我宁愿不加载WordPress,只需使用模拟来伪造类/函数,只需要测试代码的输入和输出。

我正在尝试执行以下操作:

// WP_Query IS NOT DEFINED

$mock = \Mockery::mock('WP_Query', array('have_posts' => true));

$this->assertTrue($mock->have_posts());

$q = new WP_Query();

// fails with "Call to undefined method WP_Query::have_posts()"
$this->assertTrue($q->have_posts());

以上是否可以使用Mockery?

1 个答案:

答案 0 :(得分:0)

当一个数组作为Mockery::mock的第二个参数传递时,它期望构造函数参数,而不是模拟的方法。

相反,你需要:

$mock = \Mockery::mock('WP_Query');
$mock->shouldReceive('have_posts')->andReturn(true);