Я новичок в тестировании PHP и пытаюсь создать простой проект с TDD.TDD, Рефакторинг после перемещения функций класса для абстракции
Простая идея состояла в том, чтобы сделать простую картографическую установку.
Я начал сочинительствы тесты и быстро начал мять вверх CardDeck класса и CardStack класса от моего failling тестов. Оба они реализовали одни и те же методы, такие как getTop(), getTopStack() .. поэтому я решил реализовать CardDeckInterface, абстрактный класс BaseCardStack, чтобы высушить его.
После рефакторинга. CardDeck и CardStack расширяет BaseCardStack, который реализует CardStackInterface.
Различия CardDeck и CardStack - это конструкция и несколько дополнительных функций для CardStack. Кроме того, ни одна из реализованных функций из BaseCardStack не перезаписывается.
Вот где мои проблемы. В моем CardDeckTest у меня были тесты, связанные с реализованными методами, которые должны были перемещать BaseCardDeck.
Должен ли я держать свои текущие тесты в своем CardDeckTest (они все еще проходят по-прежнему) и написать дополнительный набор тестов для CardStackTest? Это похоже на неправильное решение, поскольку методы уже протестированы и ничем не отличаются (не перезаписываются), как я уже упоминал, реализованные методы из BaseCardStack не перезаписываются.
Вместо этого я думаю, что я должен переместить/написать тесты для моего абстрактного класса.
В основном я хочу проверить функции в своем абстрактном классе, которые, как я знаю, будут реализованы без перезаписи.
Но как это сделать? Должен ли я высмеивать? Должен ли я менять свои шаблоны?
благодаря ответ имеет смысл. Но вы пишете -> «На самом деле это и вы, возможно, захотите применить один и тот же набор модульных тестов для любого другого класса, реализующего этот интерфейс», поэтому, если базовая абстракция получила getTop(), она распространяется на класс колоды и стека, вы хотите, чтобы я правильно тестировал их, даже если они идентичны тем, что были в базовом тесте? –
Что я имел в виду, так это то, что если у вас есть интерфейс, вы можете написать один phpunit-testcase для этого интерфейса, а затем протестировать каждый конкретный класс, реализующий этот интерфейс с этим тестовым кодом. Это не зависит от наличия абстрактного базового класса. Это более ясно? – hakre
Да это ясно :) Я собираюсь пойти на Google Writting тестирование на интерфейс. –