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 |



