Ниже приведены расширения JUnit —
- Кактус
- JWebUnit
- XMLUnit
- MockObject
Кактус
Cactus — это простая тестовая среда для модульного тестирования Java-кода на стороне сервера (сервлеты, EJB, библиотеки тегов, фильтры). Цель Cactus — снизить стоимость написания тестов для серверного кода. Он использует JUnit и расширяет его. Cactus реализует стратегию в контейнере, которая выполняет тесты внутри контейнера.
Экосистема кактуса состоит из нескольких компонентов —
-
Cactus Framework — это сердце Кактуса. Это движок, который предоставляет API для написания тестов Cactus.
-
Интеграционные модули Cactus — это внешние интерфейсы и платформы, которые предоставляют простые способы использования Cactus Framework (скрипты Ant, плагин Eclipse и плагин Maven).
Cactus Framework — это сердце Кактуса. Это движок, который предоставляет API для написания тестов Cactus.
Интеграционные модули Cactus — это внешние интерфейсы и платформы, которые предоставляют простые способы использования Cactus Framework (скрипты Ant, плагин Eclipse и плагин Maven).
Следующий код демонстрирует, как можно использовать Cactus.
import org.apache.cactus.*; import junit.framework.*; public class TestSampleServlet extends ServletTestCase { @Test public void testServlet() { // Initialize class to test SampleServlet servlet = new SampleServlet(); // Set a variable in session as the doSomething() // method that we are testing session.setAttribute("name", "value"); // Call the method to test, passing an // HttpServletRequest object (for example) String result = servlet.doSomething(request); // Perform verification that test was successful assertEquals("something", result); assertEquals("otherValue", session.getAttribute("otherName")); } }
JWebUnit
JWebUnit — это основанная на Java среда тестирования веб-приложений. Он объединяет существующие платформы тестирования, такие как HtmlUnit и Selenium, с унифицированным простым интерфейсом тестирования для проверки правильности ваших веб-приложений.
JWebUnit предоставляет высокоуровневый Java API для навигации по веб-приложению в сочетании с набором утверждений для проверки правильности приложения. Сюда входит навигация по ссылкам, ввод и отправка форм, проверка содержимого таблицы и другие типичные функции веб-приложений для бизнеса.
Простые методы навигации и готовые к использованию утверждения позволяют быстрее создавать тесты, чем при использовании только JUnit или HtmlUnit. И если вы хотите переключиться с HtmlUnit на другие плагины, такие как Selenium (скоро будет доступно), вам не нужно переписывать свои тесты.
Вот пример кода.
import junit.framework.TestCase; import net.sourceforge.jwebunit.WebTester; public class ExampleWebTestCase extends TestCase { private WebTester tester; public ExampleWebTestCase(String name) { super(name); tester = new WebTester(); } //set base url public void setUp() throws Exception { getTestContext().setBaseUrl("http://myserver:8080/myapp"); } // test base info @Test public void testInfoPage() { beginAt("/info.html"); } }
XMLUnit
XMLUnit предоставляет один класс расширения JUnit, XMLTestCase, и набор вспомогательных классов, которые позволяют делать утверждения относительно:
-
Различия между двумя частями XML (через классы Diff и DetailDiff).
-
Допустимость фрагмента XML (через класс Validator).
-
Результат преобразования фрагмента XML с использованием XSLT (через класс Transform).
-
Оценка выражения XPath на фрагменте XML (через классы, реализующие интерфейс XpathEngine).
-
Отдельные узлы в фрагменте XML, предоставляемые DOM Traversal (через класс NodeTest).
Различия между двумя частями XML (через классы Diff и DetailDiff).
Допустимость фрагмента XML (через класс Validator).
Результат преобразования фрагмента XML с использованием XSLT (через класс Transform).
Оценка выражения XPath на фрагменте XML (через классы, реализующие интерфейс XpathEngine).
Отдельные узлы в фрагменте XML, предоставляемые DOM Traversal (через класс NodeTest).
Допустим, у нас есть два фрагмента XML, которые мы хотим сравнить, и утверждаем, что они равны. Мы могли бы написать простой тестовый класс, как этот —
import org.custommonkey.xmlunit.XMLTestCase; public class MyXMLTestCase extends XMLTestCase { // this test method compare two pieces of the XML @Test public void testForXMLEquality() throws Exception { String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>"; String myTestXML = "<msg><localId>2376</localId></msg>"; assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML); } }
MockObject
В модульном тесте фиктивные объекты могут имитировать поведение сложных, реальных (не фиктивных) объектов и поэтому полезны, когда реальный объект нецелесообразно или невозможно включить в модульный тест.
Общий стиль кодирования для тестирования с фиктивными объектами заключается в:
- Создайте экземпляры фиктивных объектов.
- Установите состояние и ожидания в макете объектов.
- Вызвать код домена с фиктивными объектами в качестве параметров.
- Проверьте согласованность в макете объектов.
Ниже приведен пример MockObject с использованием Jmock.