McLotos
15.04.2019 - 07:40
Всем привет!
Собственно вопрос вот в чем, есть класс, у которого куча методов. Каждый метод может выдавать 1 из 2х вариантов результата.
Если более предметно, то есть класс-обертка вокруг Ds\Deque, реализующий интерфейс Ds\Sequence, хочу написать для него unit-тесты, но есть некоторые моменты, которые нельзя тестировать автономно, например нельзя адекватно протестировать удаление элемента коллекции, предварительно не добавив в нее элементы, а значит нужно сначала протестировать метод добавления.
Это решается через аннотации @depends (сначала выполнится добавление, а затем поиск и удаление). Получается 3 теста в одном сценарии. Это успешные тесты.
Теперь нужно используя те же 3 метода, но вызванные в другом порядке, отловить и обработать все их исключения. Это тесты ошибок.
Подскажите как это всё реализовать? Придется писать отдельные классы для тестирования? или как-то можно создать разные сценарии тестов в одном классе?
И вообще стоит ли так заморачиваться или хватит обычного unit-тестирования. Т.е. отдельный тест для каждого метода.
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
16.04.2019 - 14:27
Ребят, неужели никто не знает? =)
Никто не юзает phpUnit? =)
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Michael
16.04.2019 - 16:00
Цитата (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
17.04.2019 - 13:10
Цитата (Michael @ 16.04.2019 - 18:00) |
В каждом тесте(методе с именем test*) очень желательно проверять что то одно. Не в плане проверки одного метода объекта, а в плане одной фичи, или одного пути в алгоритме. |
вот! это мне и надо было узнать =)
я почему-то думал что каждый метод тестового класса это метод тестируемого класса, а тут оказывается можно делать и по-другому =)
но тогда зачем нужны @depends? Я думал что они как раз для этой ситуации
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Michael
17.04.2019 - 14:42
Цитата (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
18.04.2019 - 08:23
Цитата (Michael @ 17.04.2019 - 16:42) |
если один тест падает и ты точно знаешь что из-за этого и второй упадет, то зачем тебе эти 2 информации |
Просто может быть что цепочка падает только при определенном наборе данных, при том что каждый метод отдельно с этими же данными отрабатывает на ура
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.