Подтвердить что ты не робот

Тестирование модулей в PHP

Вы, ребята, проводите модульное тестирование на PHP? Я не уверен, что я когда-либо делал это... что это такое? Можете ли вы привести простой пример?

4b9b3361

Ответ 2

Единичное тестирование

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

Тестирование устройств - это практика тестирования только одного отдельного модуля (класса). Для unit test, чтобы быть хорошим, должно быть разрешено работать изолированно (в одиночку) и быть очень быстрым, иначе вы, вероятно, не будете запускать ваши тесты очень часто.

Интеграционные тесты

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

TDD

В прошлом, когда я кодировал больше (часто) с использованием языка PHP, я вообще не практиковал TDD (Test-Driven-Development) (оглядываясь назад, мой код был НЕ до нюха). Но теперь, когда мне нужно сделать какой-то код в PHP, мне очень нравится тестировать (модульное тестирование) свой код. По-моему, вы тоже должны это сделать, потому что это убеждает вас в качестве вашего кода.

На протяжении многих лет я пришел описать Испытательное развитие с точки зрения три простых правила. Это:

  • Вам не разрешается писать какой-либо производственный код, если он не должен сбой unit test pass.
  • Вам больше не разрешается писать unit test, чем это достаточно потерпеть неудачу; и сбои компиляции неудачи.
  • Вам не разрешается писать больше производственного кода, чем достаточно, чтобы передать один сбой unit test.

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

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


Пример

Можете ли вы представить простой пример?

Первый действительно простой пример, чтобы начать работу с веб-сайта phpunit.

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
?>

В качестве более сложного примера я хотел бы указать вам на фрагмент my на github.

PHPUnit с охватом кода

Мне нравится практиковать что-то под названием TDD с использованием модульной системы тестирования (в PHP, которая phpunit).

Что мне также очень нравится в phpunit, так это то, что он также предлагает покрытие кода через xdebug. Как видно из изображения ниже, мой класс имеет 100% -ный охват тестирования. Это означает, что была проверена каждая строка из моего класса Authentication, что дает мне уверенность в том, что код делает то, что должен. Имейте в виду, что покрытие не всегда означает, что ваш код хорошо протестирован. Вы можете иметь 100% -ый охват без тестирования отдельной строки производственного кода.

Netbeans

Лично мне нравится тестировать свой код внутри Netbeans (для PHP). с простым щелчком мыши (alt + f6) я могу проверить весь свой код. Это означает, что мне не нужно оставлять IDE, что мне очень нравится, и помогает экономить время переключения между сеансами.

enter image description here

Ответ 3

Вы имеете в виду, что такое юнит-тестирование? Или как мне эффективно провести модульное тестирование в PHP? Если это первое, то http://en.wikipedia.org/wiki/Unit_testing, если второе, то https://phpunit.de/

Ответ 4

Я думаю, лучший ответ - указать на самый популярный инструмент модульного тестирования в PHP - PHPUnit: http://www.phpunit.de/manual/current/en/automating-tests.html

В руководстве PHPUnit вы найдете все, что вам нужно для начала.

Ответ 5

Для PHP5 существует еще одна инфраструктура модульного тестирования - SimpleTest. Имя не врет - с ним все будет в порядке.

Есть также хороший учебник по Nettuts.

Ответ 6

Я думаю, что руководство phpunit (платформа тестирования модулей php) имеет соответствующее руководство, чтобы начать работу с модульным тестированием.

Вы можете начать с автоматического тестирования (что является прекрасным введением) и двигаться дальше.

Ответ 7

Я еще не делаю этого, но начну, вероятно, на следующей неделе.:)

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

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

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

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

Лучше всего начинать писать модульные тесты для нового кода. Сначала вы пишите тесты, а затем код. Это автоматически заставит вас писать независимый код.:)

Ответ 8

Модульное тестирование - это простой способ заставить других полагать, что ваше программное обеспечение работает так, как должно быть. В рамках модульного тестирования вы убедитесь, что ваша функция add(2, 3), определенная как function add($a, $b) { return $a + $b; }, вернет ровно 5. Это очень полезный инструмент, когда вы разрабатываете сложное программное обеспечение - оно помогает вам и другим найти незначительные (скрытые, логические) ошибки. Преимущества программного обеспечения для тестирования модулей - стандартизация и автоматизация процессов тестирования, поэтому вам не нужно писать код function assert($whatever) { return $whatever === true; } и делать возможными человеческие ошибки.

Ответ 9

Поскольку другие ребята упомянули, что такое модульное тестирование, я скажу, почему это хорошо:)

Тестирование модулей (особенно для динамических языков, таких как PHP) полезно по нескольким причинам, и я укажу несколько:

  • Поскольку PHP динамически типизирован, вы можете превратить логическую переменную в строку, массив в целое и так далее. Если у вас есть модульные тесты, которые покрывают ваши предварительные и постконфиденциальные условия, вы избегаете таких ошибок, которые не очень приятно искать
  • Когда вы пишете тесты (и это хорошо сделать после написания метода), вы думаете о том, как вы собираетесь использовать этот метод на ранней стадии и тем самым - вы можете поймать ошибки или увидеть недостатки дизайна очень в начале разработки вашего проекта.
  • Когда у вас есть код, охватываемый модульными тестами, и вы начинаете вносить изменения, добавляя функции или рефакторинг кода, когда вы что-то сломаете из старого кода - модульные тесты сразу скажут вам. Таким образом, вы можете быть уверены, что все новые функции не разрушают старый (и такие ошибки могут появляться позже и могут быть очень трудными для поиска), а ваш код находится в стабильном состоянии.

Я надеюсь, что мои объяснения будут полезны:)