模拟类在方法

时间:2017-01-01 04:31:32

标签: unit-testing phpunit

我正在尝试测试一个类,每个方法都经过测试,除了最后一个,这个对我来说有点棘手,因为它在同一个类中调用另一个方法并使用它的返回值将字符串返回给用户

/**
 * Get the total time elapsed as a
 * human readable string
 *
 * @return string
 */
public function getElapsedTimeString()
{
    $elapsed = $this->getElapsedTime();

    return "{$elapsed} seconds elapsed.";
}

为了测试它,我需要确保$this->getElapsedTime()将返回一个设置值,如5或6,我一直试图用模拟做这个,但它不起作用,它返回{{1每一次。

null

我在这里缺少什么?提前抱歉,如果这是一个愚蠢的问题,我只是开始使用PHPUnit并且它有点压倒性

1 个答案:

答案 0 :(得分:0)

让它像这样工作,简单地使用setMethods和我想要覆盖的方法的名称,不知道为什么这个有效,但确实如此。

public function testGetElapsedTimeStringMethod()
{
    // Create Mock of the CarbonTimer class
    $stub = $this->getMockBuilder(CarbonTimer::class)
        ->setMethods(['getElapsedTime'])
        ->getMock();

    // Configure the Mock Method
    $stub->method('getElapsedTime')
         ->willReturn(5);

    $this->assertEquals("5 seconds elapsed.", $stub->getElapsedTimeString());
}