JUnit на страже качественного кода

Feb 04, 2016 11:46

Одно из скрытых приемуществ при использовании JUnit, это то, что на выходе вы получаете более сегментированный, более простой и, как следствие, более качественный код.

Если кто не понял, что я имею ввиду, то поясню. Допустим, ваш класс включает в себя закачку данных от провайдера и загрузку их в базу данных. Фактически, вам нужна всего лищь одна открытая функция, которая запустит весь процесс. Однако, как протестировать подобный код? Можно конечно запустить функцию целиком и проверить, сделает ли она свою работу или нет, но тест, в этом случае, может быть просто слишком долгим. Кроме того, функция будет либо привязана к системе провайдера и код сломается при тесте, если сайт провайдера недоступен в момент компиляции. Либо, придётся поднимать gmock и полностью имитировать сайт провайдера, что тоже не катит.

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

Реально, сейчас сравниваю свой код, написанный с использованием JUnit и код без оного - как небо и земля.

На случай, однако, если вы забыли фрагментировать код изначально, то в Джаве есть способ протестировать закрытые функции и переменные. Буквально это выглядит так:

Для функций:

Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);

Для переменных:

Field field = targetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);

Криво, но работает.

via

пособие по вкручиванию лампочек, junit

Previous post Next post
Up