[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP Unit для разных сценариев
McLotos
Всем привет!
Собственно вопрос вот в чем, есть класс, у которого куча методов. Каждый метод может выдавать 1 из 2х вариантов результата.
Если более предметно, то есть класс-обертка вокруг Ds\Deque, реализующий интерфейс Ds\Sequence, хочу написать для него unit-тесты, но есть некоторые моменты, которые нельзя тестировать автономно, например нельзя адекватно протестировать удаление элемента коллекции, предварительно не добавив в нее элементы, а значит нужно сначала протестировать метод добавления.
Это решается через аннотации @depends (сначала выполнится добавление, а затем поиск и удаление). Получается 3 теста в одном сценарии. Это успешные тесты.
Теперь нужно используя те же 3 метода, но вызванные в другом порядке, отловить и обработать все их исключения. Это тесты ошибок.
Подскажите как это всё реализовать? Придется писать отдельные классы для тестирования? или как-то можно создать разные сценарии тестов в одном классе?
И вообще стоит ли так заморачиваться или хватит обычного unit-тестирования. Т.е. отдельный тест для каждого метода.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Ребят, неужели никто не знает? =)
Никто не юзает phpUnit? =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Michael
Цитата (McLotos @ 15.04.2019 - 05:40)
Подскажите как это всё реализовать? Придется писать отдельные классы для тестирования? или как-то можно создать разные сценарии тестов в одном классе?

Очень непонятно ты формулируешь вопросы.
В PhpUnit написано же как и где писать тесты:
Цитата
The tests for a class Class go into a class ClassTest.

ClassTest inherits (most of the time) from PHPUnit\Framework\TestCase.

The tests are public methods that are named test*.


Цитата (McLotos @ 15.04.2019 - 05:40)

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

В каждом тесте(методе с именем test*) очень желательно проверять что то одно. Не в плане проверки одного метода объекта, а в плане одной фичи, или одного пути в алгоритме.
Например проверяешь удаление, и связанную с этим какую то ситуацию,, вот только это и проверяй, все что настроишь для работы теста, это все будет фикстурами, служебным, для них assert-ы не пиши тут.
Главное ведь чтобы тест был читабельным, а не мешанина логики.

_____________
There never was a struggle in the soul of a good man that was not hard
McLotos
Цитата (Michael @ 16.04.2019 - 18:00)

В каждом тесте(методе с именем test*) очень желательно проверять что то одно. Не в плане проверки одного метода объекта, а в плане одной фичи, или одного пути в алгоритме.

вот! это мне и надо было узнать =)
я почему-то думал что каждый метод тестового класса это метод тестируемого класса, а тут оказывается можно делать и по-другому =)
но тогда зачем нужны @depends? Я думал что они как раз для этой ситуации

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Michael
Цитата (McLotos @ 17.04.2019 - 11:10)
но тогда зачем нужны @depends? Я думал что они как раз для этой ситуации

Ну с @depends в phpunit есть возможность фикстуры передать между тестами. Немного экстравагантно, но мало ли.
А так то чтобы не захламлять вывод, если один тест падает и ты точно знаешь что из-за этого и второй упадет, то зачем тебе эти 2 информации. Нужно источник узнать, чтобы его "лечить".

_____________
There never was a struggle in the soul of a good man that was not hard
McLotos
Цитата (Michael @ 17.04.2019 - 16:42)
если один тест падает и ты точно знаешь что из-за этого и второй упадет, то зачем тебе эти 2 информации

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

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.