Автоматическое генерирование Unit-Tests для устаревшего Java-кода

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

Ответ 1

Не бесплатно. Не с открытым исходным кодом. Но я нашел AgitarOne Agitator (http://www.agitar.com/solutions/products/agitarone.html), чтобы быть ДЕЙСТВИТЕЛЬНО хорошим для автоматического создания модульных тестов и поиска нежелательных неясных побочных эффектов

Ответ 2

Честно говоря, я бы, наверное, этого не сделал. Единичные тесты изолированы, и вы на самом деле не знаете, есть ли у вас "нежелательные, неясные побочные эффекты", потому что все отслоилось от других вещей, которые вызывают побочные эффекты. В результате вам требуется интеграция или системное тестирование, и это не то, что вы можете автоматизировать.

Постройте несколько высокоуровневых сквозных системных тестов, которые дают вам определенную степень уверенности, а затем используют тестирование покрытия, чтобы узнать, что вы пропустили. Недостатком является то, что когда возникают ошибки, это будет сложнее указать на их точную причину, но вверху является то, что вы будете гораздо чаще видеть ошибки.

Как только вы найдете ошибки, напишите единичные тесты только для них. По мере продвижения вперед вы можете использовать TDD для бит, который вы хотите реорганизовать.

Я знаю, что это, вероятно, не тот ответ, который вы хотите услышать, но я тестировал много-много лет, и это надежный подход (хотя я бы вряд ли назвал его единственным:)

Ответ 3

Это интересно, но такие сгенерированные модульные тесты могут быть действительно полезными. Если вы работаете над устаревшим приложением, часто бывает сложно написать правильные, современные модульные тесты.

Такие сгенерированные тесты (если у вас есть способ их генерировать, конечно) могут затем убедиться, что поведение кода остается неизменным во время ваших изменений, что затем поможет вам реорганизовать код и написать лучшие тесты.

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

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

Бонусный совет!. В примерах на Java есть отличная книга "Эффективная работа с устаревшим кодом", в том числе методы, которые можно использовать в таких ситуациях. К сожалению, вам придется делать некоторые вещи вручную, но вам все равно придется делать это на любом этапе.

Ответ 4

Плагин Coview для Eclipse (http://www.codign.com/products.html) выглядит просто как работа. Я заинтересован в создании тестов, которые охватывают все пути в коде, и это похоже на это. Он также генерирует насмешки, которые должны сэкономить массу времени.