Какое место для тестхелпер-классов?(phpunit / лучшая практика) - PullRequest
2 голосов
/ 18 апреля 2011

Я хочу протестировать свое приложение с помощью PHPUnit.Итак, у меня есть классы приложений и второе дерево с тестовыми классами, как обычно.Теперь мне нужно для некоторого теста своего рода Dummy / Mock-Objects, и я хочу знать, где я должен их разместить.Это другой вариант использования, и он должен быть в общей папке lib, или что лучше?

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

В тех случаях, когда я не использую фиктивные объекты, а вместо этого создаю одноразовый подкласс для тестового примера, я называю класс префиксом тестового набора и помещаю его в тот же файл после самого тестового примера.

Префикс тестового случая исключает любую вероятность того, что имя класса будет конфликтовать с любыми реальными классами, а размещение кода в том же файле облегчает работу с тестом. Если вы обнаружите, что вам нужно создать несколько подклассов для одного теста, это, вероятно, сигнал о том, что ваш класс делает слишком много.

class MyClassTest extends PHPUnit_Framework_TestCase
{
    function setUp() {
        $this->fixture = new MyClassTest_DoesNothing;
    }
}

class MyClassTest_DoesNothing extends MyClass
{
    ...
}
1 голос
/ 22 апреля 2011

Мне нравится отражать файловую структуру проекта, над которым я работаю.

/project
  app/
  app/models/BankAccount.php
  tests/
    suite/
      app
      app/models/BankAcountTest.php
    mocks
      app/
      app/models/BankAccountMock.php

Я считаю, что при таком способе все организовано.Я помещу небольшие Mocks или заглушки в файл Test Case, если не собираюсь их повторно использовать.Как было сказано в других комментариях, большинство Mocks может быть сгенерировано PHPUnit, но иногда проще просто свернуть свои собственные.

0 голосов
/ 18 апреля 2011

Нет места, где можно разместить заглушки или макеты.Я склонен добавлять папку _files всякий раз, когда чувствую потребность в определенных внешних ресурсах в той же папке, что и тест, в котором они нужны.Но это только я.

Однако , PHPUnit имеет встроенную среду для имитации, поэтому в общем случае вам не нужно жестко кодировать свои заглушки и / или макеты.См. Главу

Пример 10.2. Создание заглушки метода для возврата фиксированного значения

class StubTest extends PHPUnit_Framework_TestCase
{
    public function testStub()
    {
        // Create a stub for the SomeClass class.
        $stub = $this->getMock('SomeClass');

        // Configure the stub.
        $stub->expects($this->any())
             ->method('doSomething')
             ->will($this->returnValue('foo'));

        // Calling $stub->doSomething() will now return
        // 'foo'.
        $this->assertEquals('foo', $stub->doSomething());
    }
}

Альтернативой фреймворку PHPUnit может быть Насмешка Падрейка Брэди , вдохновленная флексмоком Руби и Java Mockito

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...