PHPUnit如何获取mocked方法的REAL返回值?

时间:2014-11-06 10:43:42

标签: mocking phpunit stub

如何获得模拟类/方法的实际返回值?我发现了许多返回固定值的可能性,但我想要调用

的模拟方法的结果

    namespace Updater\Model;

    class TestClass
    {
        public function testFunction(){
            return 12345;
        }
    }


    class DatabaseTest extends PHPUnit_Framework_TestCase
    {

         public function testMock(){
              $mock = $this->getMock('Updater\Model\TestClass', array('testFunction'));
              $mock->expects($this->once())->method('testFunction')

              // Call the Funciton.... here i would like to get the value 12345 
              $result = $mock->testFunction();
         }
    }

我没有找到任何如何获得真正的回报价值......令人沮丧的事情:)

2 个答案:

答案 0 :(得分:2)

AFAIK你不能用PHPUnit本机模拟做到这一点。有一个名为Mockery的模拟库可以做到这一点:

http://docs.mockery.io/en/latest/reference/expectations.html

寻找passthru()方法。

那就是说,你需要从模拟中调用真正的方法并不常见。你能解释一个真实的案例吗?您可以模拟方法,以便控制其行为(返回值,抛出异常等)。

答案 1 :(得分:2)

你可以在PHPunit中完成。在这里我的例子。看一下getMock方法,您必须在其中指定要模拟的方法。

<?php


namespace Acme\DemoBundle\Tests;

class TestClass
{
    public function testFunction(){
        return 12345;
    }

    public function iWantToMockThis()
    {
        return 'mockME!';
    }
}

class DatabaseTest extends \PHPUnit_Framework_TestCase
{

    public function testMock(){
        $mock = $this->getMock('Acme\DemoBundle\Tests\TestClass', array('iWantToMockThis'));
        $mock->expects($this->once())
            ->method('iWantToMockThis')
            ->willReturn("Mocked!");

        // The Real value 
        $this->assertEquals(12345,$mock->testFunction());
        // The mocked value
        $this->assertEquals("Mocked!",$mock->iWantToMockThis());

         }
}

希望得到这个帮助。