Компоновка файловой системы/каталога для модульных и функциональных тестов с помощью PHPUnit


Мне нужно добавить интеграционные тесты в свой набор тестов. Хотя имя PHPUnit, я нахожу, что здесь есть много возможностей для запуска неблочных тестов. Мой макет выглядит примерно так:

<root>
    lib/
        Foo/
            Component.php
    tests/
        lib/
            Foo/
                ComponentTest.php
        resources/
            fixtures/

Есть (как я вижу) три способа добавить сюда тесты уровня выше единицы измерения:

Добавление параллельной структуры

<root>
    tests/
        unit/
            lib/
                Foo/
                    ComponentTest.php
        integration/
            lib/
                Foo/
                    ComponentTest.php
        resources/
            fixtures/

Это должно сработать, за исключением того, что теперь нет отношения класса 1:1: тестовый класс, которое могло бы (и, вероятно, приведет) к путанице Netbeans.

Добавление <root>/tests/lib/Foo/ComponentIntegrationTest.php

Имеет ту же проблему, что и выше, с меньшим количеством каталогов.

Добавление тестов в существующий класс тестов с обозначением, подобным @group integration

Это сохраняет соотношение 1:1, но значительно усложняет набор тестов. Кроме того, поскольку SUT необходимо будет вызывать в изменяющейся среде, я не могу просто повторно использовать _setup() из модульных тестов.

Идеи?

Author: Dalibor Karlović, 2011-10-31

1 answers

Модульные тесты используются для изолированного тестирования одного модуля (класса). Интеграционные тесты предназначены для совместного тестирования нескольких устройств. Таким образом, у вас, вероятно, не будет корреляции 1:1 между классами и интеграционными тестами, к которым они принадлежат.

Я бы создал отдельную структуру каталогов - возможно, даже отдельный проект - для размещения интеграционных тестов. NetBeans не сможет открыть "тест", к которому принадлежит класс, потому что он будет принадлежать нескольким тестам, но он будет продолжать открывать соответствующий модульный тест.

У нас есть отдельный проект для наших интеграционных тестов (называемых тестами на здравомыслие до моего приезда) с использованием Селена, и до сих пор он работает достаточно хорошо.

Обновление

Расположение каталогов для наших интеграционных тестов довольно простое: по одному каталогу на сайт. У нас есть единая кодовая база для сайта, и мы используем представления, позволяющие отдельным сайтам переопределять макет (больше, чем просто скининг). Мы не потратили столько времени на эти тесты, как мне бы хотелось. Мы используем Selenium для выполнения тестов после отправки сайтов на промежуточный сервер. У меня еще не было возможности подключить их к нашему серверу непрерывной интеграции (Jenkins), но это было бы идеально.

Я бы рекомендовал организовать их по функциональным областям или модулям на вашем сайте. В основном это зависит от того, как вы думаете о проекте, который вы тестируете. Пример может выглядеть так:

src/
    Model/
        Cart.php
    ...
tests/
    unit/
        phpunit.xml
        bootstrap.php
        Model/
            CartTest.php
        ...
    integration/
        account/
            login/
            register/
            subscriptions/
        products/
            listing/
            details/
            search/
        cart/
            shop/
            checkout/
 6
Author: David Harkness, 2011-11-02 18:24:20