LogOnAction Test

Testen der LogOnAction vom Videoautomaten

(Dieses Beispiel ist für die Datei videoautomat.war geschrieben.)

Vorbereitungen

  • StrutsTestCase hier downloaden und entpacken. Dann die darin enthaltene Datei "strutstest-2.1.3.jar" nach "WEB-INF/lib" kopieren.
  • Anschließend die Datei dem Build Pfad hinzufügen.
    (In Eclipse mit der rechten Maustaste auf die gerade kopierte Datei klicken und mit "Build Path -> Add to Build Path".)
  • Die Testmethoden kümmern sich nicht um den in der "transitions.xml" beschriebenen Abläufe. Um die damit verbundenen Fehlermeldungen zu umgehen, ist (für die Tests) eine kleine Änderung in der "struts-config.xml" notwendig: statt
    <controller processorClass="web.sale.CustomRequestProcessor" /> ist
    <controller processorClass="web.sale.RequestProcessor" /> zu setzen.

Quelltext

package test.videoautomat.logon;

import org.apache.struts.util.MessageResources;

import servletunit.struts.MockStrutsTestCase;
import users.UserManager;
import videoautomat.MainPlugIn;
import videoautomat.VideoShop;
import web.sale.SessionContext;
import web.sale.Shop;

public class TestLogOnAction extends MockStrutsTestCase {
  // Variable um auf die Meldungen der MessageRessources.properties
  // zuzugreifen
  protected static MessageResources messages = MessageResources
      .getMessageResources("MessageResources");

  // Standard Konstruktor wie bei JUnit Tests
  public TestLogOnAction(String testName) {
    super(testName);
  }
  
  protected void setUp() throws Exception {
    super.setUp();
    VideoShop shop = new VideoShop();
    Shop.setTheShop(shop);
    MainPlugIn.initializeVideos();
    MainPlugIn.initializeUsers();
    MainPlugIn.initializeMoney();  
  }  

  /**
   * Wenn kein Benutzername eingegeben wurde soll ein Fehler angezeigt werden.
   */
  public void testNoUsername() {
    // Pfad der LogOnAction in der struts-config.xml
    setRequestPathInfo("/LogOnAction");
    // mitteilen, dass wir den "Ok" Button betätigen wollen
    // in der logon.jsp steht:
    // <html:submit property="method">
    // <bean:message key="videoautomat.ok"/>
    // </html:submit>
    // Deshalb heißt der Parameter "method" und bekommt den Wert von
    // "videoautomat.ok" aus der MessageRessources.properties
    addRequestParameter("method", messages.getMessage("videoautomat.ok"));
    // Abfrage abschicken
    actionPerform();
    // prüfen, ob die "richtigen" Fehler angezeigt werden
    // vgl. dazu in der Klasse LogOnForm die Methode validate
    verifyActionErrors(new String[] { "logon.error.username.required" });
  }

  /**
   * Eine erfolgreiche Anmeldung ausführen
   */
  public void testSuccessfulLogin() {
    setRequestPathInfo("/LogOnAction");
    addRequestParameter("username""Customer0")// Benutzernamen setzen
    addRequestParameter("password""")// Passwort setzen
    addRequestParameter("method", messages.getMessage("videoautomat.ok"));
    actionPerform();
    // prüfen, ob man auf die "richtige" Seite kommt
    verifyForward("loggedin");
    // es dürfen keine Fehler aufgetreten sein
    verifyNoActionErrors();
    // prüfen, ob der User auch dem SessionContext hinzugefügt wurde
    SessionContext sc = new SessionContext(getRequest());
    sc.getUser().equals(UserManager.getGlobalUM().getUser("Customer0"));
  }

  /**
   * Einen ungültigen Benutzernamen ausprobieren
   */
  public void testWrongUsername() {
    setRequestPathInfo("/LogOnAction");
    addRequestParameter("username""unknown");
    addRequestParameter("password""");
    addRequestParameter("method", messages.getMessage("videoautomat.ok"));
    actionPerform();
    verifyActionErrors(new String[] { "logon.error" });
    verifyInputForward()// man muss wieder auf der Eingabeseite sein
  }

  /**
   * Ein falsches Passwort testen 
   */
  public void testWrongPassword() {
    setRequestPathInfo("/LogOnAction");
    addRequestParameter("username""Customer0");
    addRequestParameter("password""wrong");
    addRequestParameter("method", messages.getMessage("videoautomat.ok"));
    actionPerform();
    verifyActionErrors(new String[] { "logon.error" });
    verifyInputForward();
  }
}
Java2html

inf2

Institut für Softwaretechnologie
Fakultät für Informatik
Universität der Bundeswehr München
85577 Neubiberg

Tel: +49 (89) 6004-2263 oder -3352
Fax: +49 (89) 6004-4447
E-Mail: inf2@unibw.de

So finden Sie uns