Как создать макет объекта в методе setUpBeforeClass phpunit? - PullRequest
4 голосов
/ 18 октября 2011

Я хочу, чтобы во всех моих тестах был макетированный объект, поэтому я пытаюсь создать его в методе setUpBeforeClass (), но этот метод является статическим, поэтому getMockBuilder должен вызываться статически следующим образом:

public static function setUpBeforeClass() {

  self::mocked_object = self::getMockBuilder('MockedClass')
  ->disableOriginalConstructor()
  ->getMock();

}

Проблема в том, что getMockBuilder не может быть вызван статически:

Argument 1 passed to PHPUnit_Framework_MockObject_MockBuilder::__construct() must be an instance of PHPUnit_Framework_TestCase, null given

Есть ли шанс, что макет объекта будет встроен в метод setUpBeforeClass, или мне придется создавать его каждый раз перед тестом (вметод публичная функция setUp () )?

1 Ответ

5 голосов
/ 18 октября 2011

Каждый фиктивный объект привязан к экземпляру тестового примера, который его создал.Поскольку setUpBeforeClass() является статическим методом, он не имеет экземпляра и не может создавать фиктивные объекты.

Вместо этого создайте свои макеты в setUp() или вспомогательных методах и либо назначьте их переменным экземпляра, либо верните их.

class MyServiceTest extends PHPUnit_Framework_TestCase
{
    function setUp() {
        $this->connection = $this->getMock('MyDatabaseConnection', array('connect', ...));
        $this->connection
                ->expects($this->once())
                ->method('connect');
    }

    function testLogin() {
        $this->connection
                ->expects($this->once())
                ->method('login')
                ->with('bob', 'p4ssw0rd');
        $service = new MyService($this->connection);
        self::assertTrue($service->login('bob', 'p4ssw0rd'));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...