Учебники

JUnit — Расширения

Ниже приведены расширения 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.