Модульное тестирование PHP без фреймворка ... Возможно? Полезности? - PullRequest
11 голосов
/ 12 января 2011

Когда вы начинаете поиск модульных тестов PHP, вы обычно сталкиваетесь с:

  1. PHPUnit.
  2. SimpleTest.
  3. Множество блогов, объясняющих, как использоватьPHPUnit и SimpleTest.
  4. StackOverflow вопросы о PHPUnit и SimpleTest ...

... и я думаю, вы поняли.

Мне было интересно: какМожно ли провести модульное тестирование на обычном старом PHP?Это даже мудрое начинание?

Полагаю, мне нужно было бы построить свою собственную маленькую структуру.Мне интересно, потому что я хочу лучше понять, что происходит в моих юнит-тестах.Мне также интересно, потому что я думаю, что легкое, специально разработанное решение ускорило бы мои тесты.

Дополнительный вопрос: кто неудачник?Есть ли какая-то третья основа, которую стоит изучить (для академических целей)?

Ответы [ 4 ]

9 голосов
/ 12 января 2011

Модульное тестирование - это в основном набор утверждений.

Рассмотрим следующий тестовый пример PHPUnit:

class MyTest extends PHPUnit_Framework_TestCase {
   public function testFoo() {
       $obj = new My;
       $this->assertEquals('bar', $obj->foo());
   }
}

Подобный тестовый случай можно выполнить без использования PHPUnit:

class MyTest {
   public function testFoo() {
       $obj = new My;
       assert("$obj->foo() == 'bar'");
   }
}

Однако, делая это без каркаса, вам придется вручную создать экземпляр тестового примера (MyTest) и вызвать каждый тестовый метод вручную (MyTest :: testFoo и т. Д.).

Фреймворк (например, PHPUnit) - это не что иное, как набор «помощников», которые делают его проще и быстрее: путем автоматической генерации скелета;со встроенными фиктивными объектами, сценариями командной строки и т. д.

Вы все еще можете выполнять модульное тестирование без каркаса, но, в конце концов, вы, вероятно, сэкономите больше времени, используя один, потому что, в конце концов, обычно эторамки для.

2 голосов
/ 12 января 2011

На мой взгляд, что такого плохого в стандартном колесе (по всей вероятности, PHPUnit), которое оправдывает разработку замены? В конце концов, разве проверенное решение не является более разумным выбором в этом случае?

Кроме того, вывод стандартных инструментов будет проще в использовании, если вы когда-нибудь захотите воспользоваться преимуществами сервера непрерывной интеграции в дальнейшем. (Конечно, вы можете создать свой собственный инструмент в идентичном формате, но это возвращает меня к аргументу «зачем изобретать велосипед».)

1 голос
/ 29 августа 2011

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

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

Бонусный вопрос: кто неудачник? Есть ли какая-то третья основа, которую стоит изучить (для академических целей)?

В области модульного тестирования PHP есть недоработки, например Enhance PHP , который представляет собой среду модульного тестирования со встроенными макетами и заглушками. Он имеет некоторые преимущества перед крупными игроками - он имеет документации и очень быстро начать работу.

1 голос
/ 12 января 2011

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

По сути, он включал все классы, начинающиеся с «test», и вызывал бы все методы, начинающиеся с «test», внутриэтот класс.Внутри методов, которые вы могли бы утверждать, результаты - это то, что вы ожидали.

Если бы вы собирали свой собственный фреймворк, я настоятельно рекомендовал бы изучить SimpleTest раньше.Он очень легкий по сравнению с PHP Unit (если вас это пугает).

...