PHP Unit Testing без рамки... Возможно? Полезности?

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

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

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

Мне было интересно: как проходить единичное тестирование с помощью простого ol 'PHP? Это даже мудрая работа?

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

Бонусный вопрос: кто проигравший? Существует ли третья рамка, стоящая в поиске (для целей acedemic)?

Ответ 1

Единичное тестирование - это в основном набор утверждений.

Рассмотрим следующий тестовый пример 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) - это не что иное, как набор "помощников", чтобы сделать ее проще и быстрее: автоматически генерируя скелет; со встроенными макетными объектами, сценариями командной строки и т.д.

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Бонусный вопрос: кто проигравший? Существует ли третья рамка, стоящая в поиске (для целей acedemic)?

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