模拟公共测试对象的方法

时间:2014-12-27 06:32:13

标签: php unit-testing testing phpunit mockery

我有一个有两个公共方法的类。它看起来像下面这样:

class IntRequest
{
    public function updateStatus()
    {
        $isValid = $this->checkValidity();

        // ... next is a complex logic that use $isValid
    }

    /**
     * @return bool
     */
    public function isValid()
    {
        // another complex logic
    }
}

我需要测试第一个函数 - IntRequesr::updateStatus;但是我需要运行测试。由于IntRequests::isValid

,第一个false返回true,第二个IntRequests::isValid返回IntRequests::isValid

我尝试模拟该函数,但测试运行时调用实际的$intRequest = new IntRequests; $mock = m::mock($intRequest); $mock->shouldReceive('isValid') ->once() ->andReturn(true); $res = $mock->updateStatus(); $this->assertTrue($res); 而非模拟的。

我的测试代码是

$res = $intRequest->updateStatus()

我尝试拨打$res = $mock->updateStatus()而不是{{1}},但没有运气。

所以,我想知道是否可以模拟在测试方法中调用的函数?

1 个答案:

答案 0 :(得分:1)

你需要一个partial mock(一个模拟对象,其中一些方法是存根的,而其余方法保留原样)。由于我只使用phpunit自己的模拟库完成了这个,我只能指向你的文档,但似乎你应该只将->makePartial()添加到你的模拟实例中

相关问题