Týmto článkom, venovaným testovaniu výstupu zo stránok JSP, sériu o Cactuse uzavrieme. Ukážeme si, ako je možné jednoducho otestovať odpoveď, ktorú dostaneme po zavolaní stránky JSP, povieme si, kedy nie je vhodné použiť Cactus framework, a na záver vás upozorním, ako navrhovať stránky JSP tak, aby boli jednoducho testovateľné.

Čo sa týka samotných stránok JSP a možnostiam ako ich testovať, ja sa budem zaoberať len testovaním výstupu z nich. V skutočnosti však táto technológia dáva viac možností a príležitostí (napríklad Java Beans, Java Standard Tag Libraries), pri ktorých môžeme hovoriť o testovaní ich funkčnosti. To by však poriadne presiahlo môj zámer týkajúci sa tohto krátkeho seriálu, a to poskytnúť vám základné informácie, ktoré môžu naštartovať váš záujem o Cactus framework.

Testovanie výstupu JSP

Poďme teda na to. Chceme nejakým spôsobom zistiť či stránka JSP ako odpoveď vráti očakávané hodnoty. Využijeme princíp Model-View-Controller (MVC). Ide o jeden z množstva návrhových vzorov pre programovanie, v tomto prípade J2EE aplikácií. Pre bližšie informácie odporúčam prejsť si uvedený odkaz. Ako Model, teda komponent, ktorý je zodpovedný za aplikačnú logiku a uchovanie stavu, bude vystupovať naša testovaná JSP stránka. Ako Controller, komponenta definujúcia správanie sa aplikácie, bude servlet test case, nazvime ho ServletToTestJSP. No a posledný, do tretice, je prvok View, teda prezentačná vrstva, ktorej úlohu zastúpi samotný Cactus, respektíve jeho časť zodpovedná za prezentáciu výsledkov.

Kľúčovú úlohu tu zohráva servlet test case, ktorý odovzdá stránke JSP potrebné informácie a po ich spracovaní prevezme výsledky, ktorých správnosť overí. Za týmto účelom musíme vytvoriť metódu, ktorá zabezpečí odovzdanie potrebných údajov stránke JSP, a ďalšiu metódu, ktorá overí získané výsledky. Prvým krokom teda bude vytvoriť servlet test case, ktorý nastaví potrebné informácie pre JSP. Napríklad môže ísť o nejaký špecifický objekt uložený v HttpSession, pričom tento objekt môžeme získať cez JDBC alebo EJB. Alebo to môže byť atribút objektu request, ako v našom prípade.

ServletToTestJSP.java:

import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebResponse;
import javax.servlet.RequestDispatcher;
public class ServletToTestJSP extends ServletTestCase {
 public ServletToTestJSP(String methodName) {
  super(methodName);
 }
 String startTest = „testjsp“;
 String[] endTest;
 /* Do tejto metódy môžete umiestniť logiku,
 zodpovednú za získanie údajov pre JSP. Môžete využiť
 napríklad JDBC alebo EJB. Pre názornosť to urobíme
 veľmi jednoducho, nastavíme atribút objektu request*/
 public void testForwardingToJsp() throws Exception {
  this.request.setAttribute(„test_string“, startTest);
  RequestDispatcher rd = this.config.getServletContext()
      .getRequestDispatcher(„/convert.jsp“);
  rd.forward(this.request, this.response);
 }
 /*V tejto metóde overíme, či odpoveď obsahuje
 údaje, ktoré sme očakávali.*/
 public void endForwardingToJsp(WebResponse webResponse) {
  /* metóda getTextAsArray() vráti odpoveď
  (okrem hlavičky) ako pole reťazcov. Každý
  záznam je jeden riadok z výstupného prúdu */
  endTest = webResponse.getTextAsArray();
  // náš porovnávaný reťazec má index 2
  assertNotNull(endTest[2]);
  assertEquals(startTest.toUpperCase(),endTest[2]);
 }
}

Čo sa týka samotnej stránky JSP (convert.jsp), je veľmi jednoduchá a obsahuje iba najnutnejšie časti kódu. Jej úlohou je prevziať atribút a v prípade, že nie je „null“, previezť ho na veľké znaky. Prevedený reťazec následne pošle na výstup.

<%@page contentType=“text/html“%>
<% String test_string = (String) request.getAttribute(
      „test_string“);%>
<% if (!test_string.equals(null)) {
      out.println(test_string.trim().toUpperCase());
} else { out.println(„Attribute is null“);} %>

Po skompilovaní a následnom nasadení na server, môžeme náš test vyskúšať. Chcem upozorniť na správne umiestnenie súboru convert.jsp, ktorý musíte vložiť do koreňa webovskej aplikácie, v našom prípade je to adresár test. Ak ho chcete umiestniť na iné miesto, musíte adekvátne upraviť zdrojový súbor ServletToTestJSP.java na riadku číslo 21. A tu je výsledok testu:

Výsledok testu
Výsledok testu

Použitie frameworku Cactus

Ako už samozrejme viete, Cactus je určený na testovanie server-side kódu. Je to dobrý testovací framework, avšak testovanie server-side kódu je stále veľkou výzvou. Okrem toho je závislé na aplikačnom serveri. Preto sa odporúča zabezpečiť minimum kódu, ktorý je možné testovať výhradne na bežiacom serveri. Je veľmi vhodné vložiť čo najviac logiky do pomocných nezávislých tried a oddeliť ich tak od servletov a JSP. Takéto samostatné triedy môžete potom testovať pomocou JUnit.

Dobrým príkladom je testovanie session trackingu. V článku Cactus – testovanie sledovania session sú použité dve pomocné triedy ShopCart a Item, ktoré by mohli byť testované pomocou JUnit.

V prípade testovania JSP je situácia ešte komplikovanejšia. Stránka JSP je mixom rôznych technológií (Java kód, XML, JSTL, Java Beans a v neposlednom rade aj HTML). To môže značne skomplikovať situáciu v súvislosti s testovaním. Preto sa veľmi odporúča navrhovať stránky JSP tak, aby sme, podobne ako pri servletoch, maximálne využili podporné triedy, ktoré sú nezávislé na aplikačnom serveri.

Na záver vám ponúkam možnosť stiahnuť si potrebné súbory.

Žádný příspěvek v diskuzi

Odpovědět