PHPUnit издеваться быстрее и не повторять код

Я хотел бы спросить вас о вашей практике написания модульных тестов, как смоделировать объект и не повторять код?

Я использую платформу Symfony2 и, например, у меня есть много пакетов с пользовательскими валидаторами. Когда я и остальная часть моей команды пишем модульный тест, мы повторяем код насмешливых Constraint, ExecutionContext, ConstraintViolationBuilderInterface. Я знаю, что мы можем создать чертный или абстрактный класс или что-то еще, где мы можем хранить код, ответственный за макет, но прежде чем я начну это делать, мне бы хотелось узнать ваши лучшие практики.

Моей первой идеей было создать класс / черту, которая будет хранить, например, макет всех репозиториев. Пример:

class MockRepositoryHelper extends \PHPUnit_Framework_TestCase
{
    public function getUserRepositoryMock()
    {
        return $this->prophesize(UserRepository::class);
    }

    // next repositories getters
}

и затем используйте этот код в реальном тестовом примере:

class EmailValidator extends \PHPUnit_Framework_TestCase
{
    private $mockRepositoryHelper;

    public function setUp()
    {
        parent::setUp();
        $this->mockRepositoryHelper = new MockRepositoryHelper();
    }

    /**
     * @test
     */
    public function it_should_find_user()
    {
        $userRepository = $this->mockRepositoryHelper->getUserReposioryMock();
        $userRepository->findUser(Argument::type('string'))->willReturn(null);

        // rest of the test
    }
}

Конечно, это только псевдокод, о котором я думал, моя первая мысль. Какие у тебя идеи?

В основном я спрашиваю, как написать модульный тест быстрее и не повторять код?

0 ответов

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