В бытность мою j2ee программистом, приходилось разрабатывать сайты с достаточно большим количеством страниц, использующие для визуализации ajax и прочие красивости. Контроллеры можно было протестировать при помощи JUnit и моковых запросов\ответов. Но для огромного количества ftl шаблонов и их JavaScript кода такой вариант не подходил.
Отличной возможностью протестировать страницы по настоящему является JWebUnit. После добавления его в проект вам будет доступен класс WebTestCase являющийся наследником TestCase из классического Junit.
Класс WebTestCase предоставляет высокоуровневое API для работы с вебстраницами, описывать его просто бессмысленно из-за запредельной простоты, поэтому просто приведу пример кода с главной страницы:
Теперь неплохо бы было научится запускать вебсервер перед выполнением пачки тестов,
а ещё лучше запускать его на сервере в задаче например для Аnt, перед сборкой, и прогонять тесты там, чтобы не сломать продакшн версию, в случае коммита на скорую руку. В этом нам поможет Cargo Conatiner, это Java API помогающее нам руководить ВебСервером из Java кода и��и прямо из задачи Ant. По традиции приведу оба сценария использования, которые можно найти на сайте разработчика:
Выполняем код руками
Запускаем в ant таске (Maven 1,Maven 2 )
Отличной возможностью протестировать страницы по настоящему является JWebUnit. После добавления его в проект вам будет доступен класс WebTestCase являющийся наследником TestCase из классического Junit.
Класс WebTestCase предоставляет высокоуровневое API для работы с вебстраницами, описывать его просто бессмысленно из-за запредельной простоты, поэтому просто приведу пример кода с главной страницы:
public class ExampleWebTestCase extends WebTestCase {
public void setUp() {
super.setUp();
setBaseUrl(«localhost:8080/test»);
}
public void test1() {
beginAt("/home");
clickLink(«login»);
assertTitleEquals(«Login»);
setTextField(«username», «test»);
setTextField(«password», «test123»);
submit();
assertTitleEquals(«Welcome, test!»);
}
}
Теперь неплохо бы было научится запускать вебсервер перед выполнением пачки тестов,
а ещё лучше запускать его на сервере в задаче например для Аnt, перед сборкой, и прогонять тесты там, чтобы не сломать продакшн версию, в случае коммита на скорую руку. В этом нам поможет Cargo Conatiner, это Java API помогающее нам руководить ВебСервером из Java кода и��и прямо из задачи Ant. По традиции приведу оба сценария использования, которые можно найти на сайте разработчика:
Выполняем код руками
Deployable war = new WAR(«path/to/simple.war»);
LocalConfiguration configuration =
new Resin3xStandaloneLocalConfiguration(«target/myresin3x»);
configuration.addDeployable(war);
InstalledLocalContainer container =
new Resin3xInstalledLocalContainer(configuration);
container.setHome(«c:/apps/resin-3.0.18»);
container.start();
// Here you are assured the container is started.
container.stop();
// Here you are assured the container is stopped.
Запускаем в ant таске (Maven 1,Maven 2 )
- tomcat.home – Домашняя папка томката
- tomcatlog.dir – Логи
- tomcatconfig.dir – Папка куда конейтенр сгенерит логи
- pathtowarfile – Полный путь к war файлу
<property name="cargolib.dir" value="${basedir}/cargolib"/>
<property name="cargo-uberjar" value="${cargolib.dir}/cargo-core-uberjar-0.7.jar"/>
<property name="cargo-antjar" value="${cargolib.dir}/cargo-ant-0.7.jar"/>
<taskdef resource="cargo.tasks">
<classpath>
<pathelement location="${cargo-uberjar}"/>
<pathelement location="${cargo-antjar}"/>
</classpath>
</taskdef>
<target name="cargostart" depends="war">
<delete dir="${tomcatconfig.dir}" />
<mkdir dir="${tomcatlog.dir}"/>
<mkdir dir="${tomcatconfig.dir}"/>
<echo message="Starting Cargo..."/>
<echo message="Using tomcat.home = ${tomcat.home} "/>
<echo message="Using war = ${mywarfile} "/>
<echo message="Jars used = ${cargo-uberjar} , ${cargo-antjar}"/>
<cargo containerId="tomcat5x" home="${tomcat.home}" output="${tomcatlog.dir}/output.log"
log="${tomcatlog.dir}/cargo.log" action="start">
<configuration home="${tomcatconfig.dir}">
<property name="cargo.servlet.port" value="8080"/>
<property name="cargo.logging" value="high"/>
<deployable type="war" file="${mywarfile}"/>
</configuration>
</cargo>
<!-- тут можно делать всякое, например тесты -->
<!-- тормозить сервер надо тем же способом, только action указать другой -->
</target>
