Как программно отсортировать проверенные функции в PHPUnit? - PullRequest
2 голосов
/ 01 апреля 2011

Я использую PHPUnit для тестирования класса, который имеет много функций.Платформа PHPUnit запускает тестовые функции сверху вниз.

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

Комупроясните проблему, представьте, что у нас есть 5 тестовых функций:

  • testFunc1
  • testFunc2
  • testFunc3
  • testFunc4
  • testFunc5

Фреймворк будет запускать testFunc1, затем testFunc2, пока не достигнет testFunc5.

Однако я хочу запустить testFunc3, затем testFunc1, затем testFunc5, затем testFunc2, затем testFunc4, не переупорядочивая их в исходном файле.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2011

PHPUnit выполнит тесты в точном порядке, в котором они написаны в вашем классе *_TestCase.

Каждый из этих тестов должен иметь возможность работать изолированно и не зависеть от каких-либо других тестов, выполненных доit.

Если у вас есть проблемы с тестированием базы данных, я бы предложил использовать что-то вроде этого:

class MyTest extends PHPUnit_Framework_TestCase {

    public function setUp() {
        // REPLACE INTO testDb (ID, NAME, VALUE) VALUES (1001000, 'testing', 'value')
        $this->db = $db_connection;
    }

    public function tearDown() {
        // DELETE FROM testDb WHERE ID > 10010000 // or something like this
    }

    public function testSelect() {
        $this->assertSame("value", $this->db->getId(100100));
    }

    /**
     * @depends testSelect
     */
    public function testInsert() {
        $this->db->insertById(1001111, "mytest", "myvalue");
        $this->db->getId(1001111);
    }

    /**
     * @depends testSelect
     */
    public function testDelete() {
        $this->db->deleteById(1001000);
        $this->assertNull($this->db->getId(10010000);
    }

    // and so on
}

Метод setUp() будет запускаться перед каждым тестовым сценарием, и убедитесь, что всеЗначения, которые нужны большинству тестовых случаев, tearDown() очистит после тестового набора.

Аннотация @depends гарантирует, что тест вставки не будет запущен, если тест выбора не пройден.(Если вы не можете загрузить значения, а затем вставить новые и получить те, которые не могут работать с эфиром, не нужно пробовать это).

Для этого также проверьте руководство по тестовым зависимостям

3 голосов
/ 01 апреля 2011

Весь смысл юнит-тестов фактически в самом названии, Юнит Тестирование. Они функционируют сами по себе и не имеют никакой зависимости друг от друга. Если вы правильно написали свои тесты, порядок выполнения не должен иметь значения.

Если это проблема с базой данных, убедитесь, что у вас есть чистая база данных перед каждым тестом.

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

Прямо сейчас нет способа сделать это, кроме переупорядочения функций в файле. Есть запрос функции, чтобы использовать аннотации @depends для переупорядочивания тестов, и автор PHPUnit выразил желание сделать это. Вы можете комментировать запрос на github-трекере PHPUnit .

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