2014-01-26 2 views
0

PhpUnit имеет генератор скелета, основанный на существующем классе.Как завершить существующий тест phpunit с генератором

Но это работает один раз.

Если позже добавлен новый метод (поскольку dev не работает с tdd), тестовый файл является неполным.

Есть ли инструмент для создания скелета для непокрытого метода?

ответ

0

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

Кроме того, генерируется имя тестовой функции, но для описания предполагаемого тестового примера или поведения тестируемой функции могут и должны быть созданы более эффективные имена. Как «testGetQuoteFromStockMarket» и «testGettingMicrosoftQuoteFromStockMarketShouldReturnQuoteObject» и «testGettingUmbrellaCorporationFromStockMarketShouldFailWithException».

Обратите внимание, что вы не можете проверить выброс исключений в сочетании с случаями, которые не вызывают исключения.

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

+0

Представьте себе класс с одним методом foo(), я запускаю генератор Я создаю тестовый файл с skel testFoo(). Позже я добавляю в том же классе метод bar() Я просто запустил генератор, который добавляет (добавляет) skel testBar() в том же тестовом файле, что и testFoo() – Moosh

+0

Представьте, что класс с одним методом 'foo() '. Чтобы полностью протестировать этот метод (поскольку он генерирует исключение, если используется с неправильным параметром), вы должны создать две тестовые функции: 'testFooShouldWork()' и 'fooShouldThrowException()'. Если позднее вы добавите новый класс 'bar()' в класс, вы должны сначала добавить тестовый метод к тесту (нет необходимости в генераторе скелета), или вы должны добавить этот простой метод тестирования после того, как вы написали свой код. Что должен сделать генератор в этом случае: Создайте еще одну функцию 'testFoo()', потому что предыдущий получил переименован, а затем удалить ее? – Sven

0

AFAIK нет встроенной функции phpunit для обновления автоматически сгенерированного тестового кода; что типично для большинства генераторов кода.

Хорошей новостью является то, что каждая из функций добавляется совершенно чисто и независимо. Итак, что бы я сделал, переименуйте существующий файл тестового файла в * .old, обновите новый тестовый файл, а затем используйте meld (или инструмент визуального сравнения по вашему выбору), чтобы объединить новые функции.

Кроме того: автоматическое создание тестов действительно необходимо только в начале нового класса; идея ровно одного модульного теста на каждую функцию больше связана с созданием хорошей статистики покрытия, чтобы угодить вашему боссу; с точки зрения создания хорошего программного обеспечения некоторые функции потребуют нескольких тестов, а некоторые функции (геттеры и сеттеры приходят на ум) действительно не нужны, а иногда несколько функций лучше всего охватываются одним блочным тестом (getters and setters снова приходят на ум).

+0

Да, я согласен. Моя потребность в 2 случаях. Непроизведенный тест.Многие классы имеют метод, добавленный без теста, поэтому я просто хочу заполнить существующие тесты с помощью skel отсутствующего метода (помечены как пропущенные), и поэтому у вас есть лучшая видимость на TODO . В моем другом случае мне нужно добавить функцию в класс. a- Я начинаю писать/определять подпись метода в классе. b- запустить генератор c- сравнить с существующим классом с meld d- добавить новый метод в существующий e- заполнить тест f- написать код для успеха теста. И я просто хочу b включить c & d – Moosh

+0

@Moosh Я полагаю, что в качестве альтернативы 'meld' вы можете запустить генератор в ветви git, созданной именно для этой цели, а затем автоматически слить в ветви. Легко вернуться назад, если это нарушает ваши существующие тесты. –

 Смежные вопросы

  • Нет связанных вопросов^_^