PHPUnit Как получить РЕАЛЬНОЕ возвращаемое значение смоделированного метода?

Как я могу получить реальное возвращаемое значение макета класса / метода? Я нашел много возможностей вернуть фиксированные значения, но я хочу получить результат смоделированного метода, который я вызываю

    Обновление пространства имен \Model;

    класс TestClass
    {
        публичная функция testFunction(){
            возврат 12345;
        }
    }
    класс DatabaseTest extends PHPUnit_Framework_TestCase
    {публичная функция testMock(){
              $mock = $this->getMock('Updater\Model\TestClass', array('testFunction'));
              $mock-> Ожидает ($this-> Once())-> Метод ('testFunction')

              // Вызов Funciton.... здесь я хотел бы получить значение 12345 
              $result = $mock->testFunction();
         }
    }

Я не нашел ничего, как получить реальное возвращаемое значение.... разочарование:)

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());

         }
}

Надеюсь, это поможет.

AFAIK, вы не можете сделать это с родными макетами PHPUnit. Существует библиотека Mockery, которая может сделать это:

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

искать passthru() метод.

Тем не менее, это не очень обычно, что вам нужно вызвать реальный метод из макета. Можете ли вы объяснить реальный случай? Вы имитируете методы, чтобы контролировать их поведение (возвращаемое значение, исключение и т. Д.).

Другие вопросы по тегам