Модульные тесты: нахождение классов классов - PullRequest
1 голос
/ 06 октября 2010

Существуют ли какие-либо автоматизированные инструменты для поиска зависимостей классов при написании модульных тестов.

Пример, показывающий, что я имею в виду:

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

Лучший способ найти зависимости, которые я нашел до сих пор, - использовать eclemma, которая дает мне списокклассы с кодом, который выполняется во время теста.

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

Редактировать: Извините, я использую eclipseи ява.

Ответы [ 2 ]

5 голосов
/ 06 октября 2010

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

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

Самый простой и лучший способ (для меня) добиться этого - начать выполнение теста с самого простого очевидного тестового приспособления, то есть обычноToBeTested tested = new ToBeTested().Если это удается, я добавляю вызов (ы) к желаемому методу (методам) объекта.Если это также удастся (т.е. не генерируются исключения во время выполнения), я добавляю утверждения.Если (когда) какой-либо из этих шагов потерпит неудачу, я изучаю / отлаживаю код, чтобы увидеть, что пошло не так, и расширяю тестовое приспособление, чтобы покрыть это.

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

4 голосов
/ 06 октября 2010

Да, один из них - JDepend, который анализирует пакет зависимостей. Мы использовали это для автоматического определения циклических зависимостей между пакетами. Я не знаю, насколько легко было бы проверить зависимости самого теста.

Более подробно об использовании JDepend с юнит-тестами можно узнать по http://www.clarkware.com/software/JDepend.html#junit.

Существует также соответствующий плагин Eclipse для визуализации зависимостей.

...