12 Инструменти за интеграция и модулно тестване в Java

Вярвам, че разработването на софтуер е нещо повече от работа. Виждам себе си като майстор, който се опитва да бъде по-добър всеки ден. „Най-лесният“ начин да направите това е да намерите някои добри инструменти и да отговорите на следните въпроси:

  • Кога трябва да използвам инструмента X?
  • Как трябва да използвам инструмент X?

Нека да погледнем в моята кутия с инструменти

Преди да можете да използвате инструментите, описани по-долу, трябва да настроите компилация, която автоматично изпълнява интеграционни и модулни тестове. Имам 2 бележки по тази тема:

  • Тестването на интеграцията с Maven описва как можем да настроим компилация на Maven с тестове за интеграция и единици в отделни директории.
  • Първи стъпки с Gradle: Интеграционното тестване с приставката TestSets описва същото за Gradle.

Ето 12 инструмента, които използвам за интегриране и тестване на единици.

Изпълнение на тестове

JUnit е рамката, която използвам както за модулни, така и за интеграционни тестове. Много го харесвам, защото. той е най-популярен, следователно има много разширения. Освен това, ако имате проблеми, няма да е трудно да намерите решение.

NestedRunner е разширение към JUnit, което ви позволява да стартирате тестови методи от вложени класове. Харесвам NestedRunner по няколко причини:

  • можете да замените дългите имена на методи с йерархия на класове в стил BDD;
  • можете да се отървете от дублиращия се код, като го преместите в методи за настройка в желаните вложени класове;
  • можете да декларирате константи във вложени класове и да ги асоциирате с тестове, които се нуждаят от тези константи.

junit-davaprovider е разширение на JUnit, което ви позволява да пишете параметризиранотестове, използващи TestNG като доставчик на данни. Това е голямо подобрение в сравнение с обичайния начин за писане на параметризирани тестове, който, честно казано, не е много добър.

Допълнително:

  • Unit Testing с JUnit описва как да пишете тестове с JUnit 4.X.
  • Писане на чисти тестове: Красотата в малък размер е свързана с решаването на проблемите, свързани с писането на чисти тестове.
  • Първи стъпки с junit-dataprovider.
  • Характеристики на junit-dataprovider.
  • junit-dataprovider - Алтернатива на параметризираните класове на JUnit описва как да преминете от стандартни параметризирани тестове към тестове, които използват junit-dataprovider.

Оформления, мъничета, замествания

Mockito е най-популярната подигравателна рамка за модулни тестове. Харесвам го заради простия му API, много полезни функции и отлична документация.

Greenmail е имейл сървър, който поддържа SMTP, POP3 и IMAP с поддръжка на SSL връзка. Харесвам го заради лесната му употреба. Когато търсех имейл сървър за отстраняване на грешки, след като прегледах няколко алтернативи, се спрях на Greenmail, защото. работи точно както ми трябваше.

MockFtpServer е библиотека, която предоставя две различни реализации на FTP сървър („stub“ и „dummy“), които могат да се използват за тестване на различни сценарии. Ако трябва да тествате код, който взаимодейства с FTP сървър, нашият избор е MockFtpServer.

Допълнително:

  • Референцията на Mockito е чудесен пример за справочна документация, която наистина помага.
  • IMAP, SMTP и POP3 интеграционно тестване с Greenmail.
  • Първи стъпки с FakeFtpServer.
  • Първи стъпки сStubFtpServer.
  • Какво да избера: FakeFtpServer или StubFtpServer? Помага ви да решите кое внедряване на FTP сървър ви е необходимо, за да изпълните определен тест.

Изявления

Hamcrest предоставя инструменти за писане на твърдения за модулни и интеграционни тестове. Използвам го с Spring MVC Test Framework.

AssertJ предоставя гъвкав API за писане на твърдения с полезни съобщения за грешка, подобрява четливостта на тестовия код и ви позволява да превърнете тестовете в изпълними спецификации, които се придържат към желания специфичен за домейн език.

Допълнително:

  • Урок за Hamcrest.
  • Използването на Hamcrest за тестване обяснява как да използвате Hamcrest за писане на тестове и как да го разширите с потребителски модули.
  • Общ преглед на AssertJ Core.
  • Превръщането на твърдения в специфичен за домейн език обяснява как да създадете персонализирани твърдения в AssertJ.
  • Писане на чисти тестове: Замяна на твърдения със специфичен за домейн език. Обяснява защо трябва да заменим стандартните JUnit твърдения с наши собствени, които използват правилния специфичен за домейн език.

Тестване на код за достъп до данни

H2 е бърза база данни, полезна за писане на интеграционни тестове, които се изпълняват на локалната машина на разработчика.

DbUnit е разширение на JUnit, което може да се използва за инициализиране на база данни до известно състояние, преди да се изпълни всеки интеграционен тест и да се попълни базата данни с необходимите данни. DbUnit има своите недостатъци, но е много полезен инструмент за разделяне на тестови данни и тестов код.

Допълнително:

  • DbUnit Core Components описваключовите компоненти на DbUnit, които трябва да знаете, за да пишете тестове с помощта на DbUnit.
  • Най-добри практики DbUnit предоставя пет правила за писане на най-добри тестове за код за достъп до данни.
  • Писането на тестове за код за достъп до данни ви помага да пишете детерминистични тестове за достъп до данни, които тестват правилното нещо, лесни са за четене и поддръжка.

Тестване на Spring приложения

Spring Test е швейцарското ножче за писане на автоматизирани тестове. Той осигурява първокласна поддръжка за писане на модулни и интеграционни тестове за приложения, използващи Spring.

Spring Test DbUnit - интегрира DbUnit в String Test framework. Ако трябва да напишете тестове за достъп до данни за приложение, което използва Spring и релационна база данни, тогава Spring Test DbUnit може да ви помогне.