Предыдущая версия справа и слеваПредыдущая версия | |
wiki:devel:parser:test:simple_test [2025/01/16 18:31] – vladpolskiy | wiki:devel:parser:test:simple_test [2025/02/01 09:53] (текущий) – внешнее изменение 127.0.0.1 |
---|
</code> | </code> |
| |
Здесь папка //simpletest// либо локальная, либо находится в пути. Вам придется отредактировать эти расположения в зависимости от того, где вы разместили набор инструментов. <color #22b14c>TestOfLogging</color> — наш первый тестовый случай, и в настоящее время он пуст. | Здесь папка //simpletest// либо локальная, либо находится в пути. Вам придется отредактировать эти расположения в зависимости от того, где вы разместили набор инструментов. <fc #22b14c>TestOfLogging</fc> — наш первый тестовый случай, и в настоящее время он пуст. |
Теперь у нас есть пять строк кода scaffolding и все еще нет тестов. Однако с этой части мы получаем возврат наших инвестиций очень быстро. Предположим, что класс <color #22b14c>Log</color> принимает имя файла для записи в конструкторе, и у нас есть временная папка, в которую можно поместить этот файл... | Теперь у нас есть пять строк кода scaffolding и все еще нет тестов. Однако с этой части мы получаем возврат наших инвестиций очень быстро. Предположим, что класс <fc #22b14c>Log</fc> принимает имя файла для записи в конструкторе, и у нас есть временная папка, в которую можно поместить этот файл... |
| |
<code php> | <code php> |
</code> | </code> |
| |
При запуске тестового случая он ищет любой метод, начинающийся со строки <color #22b14c>test</color>, и выполняет этот метод. Обычно у нас, конечно, больше одного тестового метода. Утверждения в тестовых методах запускают сообщения в тестовую среду, которая немедленно отображает результат. Этот немедленный ответ важен не только в случае, если код вызывает сбой, но и для того, чтобы операторы <color #22b14c>print</color> могли отображать свое содержимое прямо рядом с соответствующим тестовым случаем. | При запуске тестового случая он ищет любой метод, начинающийся со строки <fc #22b14c>test</fc>, и выполняет этот метод. Обычно у нас, конечно, больше одного тестового метода. Утверждения в тестовых методах запускают сообщения в тестовую среду, которая немедленно отображает результат. Этот немедленный ответ важен не только в случае, если код вызывает сбой, но и для того, чтобы операторы <fc #22b14c>print</fc> могли отображать свое содержимое прямо рядом с соответствующим тестовым случаем. |
| |
Чтобы увидеть эти результаты, нам нужно запустить тесты. Если это единственный тестовый случай, который мы хотим запустить, мы можем добиться этого с помощью... | Чтобы увидеть эти результаты, нам нужно запустить тесты. Если это единственный тестовый случай, который мы хотим запустить, мы можем добиться этого с помощью... |
**testoflogging**\\ | **testoflogging**\\ |
Fail: testcreatingnewfile->True assertion failed.\\ | Fail: testcreatingnewfile->True assertion failed.\\ |
<color white/red>1/1 test cases complete. 1 passes and 1 fails.</color> | <fc white/red>1/1 test cases complete. 1 passes and 1 fails.</fc> |
</note> | </note> |
| |
<note> | <note> |
**testoflogging**\\ | **testoflogging**\\ |
<color white/green>1/1 test cases complete. 2 passes and 0 fails.</color> | <fc white/green>1/1 test cases complete. 2 passes and 0 fails.</fc> |
</note> | </note> |
| |
</code> | </code> |
| |
Метод <color #22b14c>GroupTest::addTestFile()</color> включит файл тестового случая и прочитает все новые созданные классы, которые являются потомками <color #22b14c>SimpleTestCase</color>, одним из примеров которых является <color #22b14c>UnitTestCase</color>. На данный момент сохраняются только имена классов, чтобы тестовый исполнитель мог создать экземпляр класса, когда он будет проходить через ваш тестовый набор. | Метод <fc #22b14c>GroupTest::addTestFile()</fc> включит файл тестового случая и прочитает все новые созданные классы, которые являются потомками <fc #22b14c>SimpleTestCase</fc>, одним из примеров которых является <fc #22b14c>UnitTestCase</fc>. На данный момент сохраняются только имена классов, чтобы тестовый исполнитель мог создать экземпляр класса, когда он будет проходить через ваш тестовый набор. |
Чтобы это работало правильно, файл тестового случая не должен слепо включать какие-либо другие расширения тестового случая, которые на самом деле не запускают тесты. Это может привести к подсчету дополнительных тестовых случаев во время тестового прогона. Вряд ли это серьезная проблема, но чтобы избежать этого неудобства, просто добавьте директиву <color #22b14c>SimpleTestOptions::ignore()</color> где-нибудь в файле тестового случая. Кроме того, файл тестового случая не должен был быть включен в другом месте, иначе в этот групповой тест не будут добавлены случаи. Это будет более серьезной ошибкой, так как если классы тестового случая уже загружены PHP, метод <color #22b14c>GroupTest::addTestFile()</color> не обнаружит их. | Чтобы это работало правильно, файл тестового случая не должен слепо включать какие-либо другие расширения тестового случая, которые на самом деле не запускают тесты. Это может привести к подсчету дополнительных тестовых случаев во время тестового прогона. Вряд ли это серьезная проблема, но чтобы избежать этого неудобства, просто добавьте директиву <fc #22b14c>SimpleTestOptions::ignore()</fc> где-нибудь в файле тестового случая. Кроме того, файл тестового случая не должен был быть включен в другом месте, иначе в этот групповой тест не будут добавлены случаи. Это будет более серьезной ошибкой, так как если классы тестового случая уже загружены PHP, метод <fc #22b14c>GroupTest::addTestFile()</fc> не обнаружит их. |
| |
Для отображения результатов необходимо только вызвать //tests/all_tests.php// с веб-сервера. | Для отображения результатов необходимо только вызвать //tests/all_tests.php// с веб-сервера. |
Давайте перенесемся еще дальше в будущее. | Давайте перенесемся еще дальше в будущее. |
| |
Предположим, что наш класс логирования протестирован и завершен. Предположим также, что мы тестируем другой класс, который требуется для записи сообщений журнала, скажем, <color #22b14c>SessionPool</color>. Мы хотим протестировать метод, который, вероятно, в конечном итоге будет выглядеть так... | Предположим, что наш класс логирования протестирован и завершен. Предположим также, что мы тестируем другой класс, который требуется для записи сообщений журнала, скажем, <fc #22b14c>SessionPool</fc>. Мы хотим протестировать метод, который, вероятно, в конечном итоге будет выглядеть так... |
| |
<code php> | <code php> |
</code> | </code> |
| |
В духе повторного использования мы используем наш класс <color #22b14c>Log</color>. Обычный тестовый случай может выглядеть так... | В духе повторного использования мы используем наш класс <fc #22b14c>Log</fc>. Обычный тестовый случай может выглядеть так... |
| |
<code php> | <code php> |
</code> | </code> |
| |
Тест будет запущен, когда вызов <color #22b14c>message()</color> будет вызван на объекте <color #22b14c>MockLog</color>. Вызов mock запустит сравнение параметров, а затем отправит результирующее событие pass или fail на дисплей теста. Здесь также можно включить подстановочные знаки, чтобы тесты не стали слишком конкретными. | Тест будет запущен, когда вызов <fc #22b14c>message()</fc> будет вызван на объекте <fc #22b14c>MockLog</fc>. Вызов mock запустит сравнение параметров, а затем отправит результирующее событие pass или fail на дисплей теста. Здесь также можно включить подстановочные знаки, чтобы тесты не стали слишком конкретными. |
Если мок достигает конца тестового случая без вызова метода, ожидание <color #22b14c>expectOnce()</color> вызовет сбой теста. Другими словами, мок может обнаружить как отсутствие поведения, так и его наличие. | Если мок достигает конца тестового случая без вызова метода, ожидание <fc #22b14c>expectOnce()</fc> вызовет сбой теста. Другими словами, мок может обнаружить как отсутствие поведения, так и его наличие. |
| |
Для фиктивных объектов в наборе SimpleTest можно задать произвольные возвращаемые значения, последовательности возвращаемых значений, возвращаемые значения, выбранные в соответствии с входящими аргументами, последовательности ожидаемых параметров и ограничения на количество вызовов метода. | Для фиктивных объектов в наборе SimpleTest можно задать произвольные возвращаемые значения, последовательности возвращаемых значений, возвращаемые значения, выбранные в соответствии с входящими аргументами, последовательности ожидаемых параметров и ограничения на количество вызовов метода. |