Übung V zur Vorlesung Informatik II Prof. Dr. Nikolaus Wulff zum 2. Juni 2008 1 HTML Testseite Zum Testen des HTML-Providers ist es nützlich eine HTML-Seite zu erstellen, die vom Browser angezeigt werden soll. Möglichst soll dies so geschehen, dass diese Seite innerhalb eines JUnit-Tests validiert werden kann, d.h. der HTML-Provider kann automatisiert auf seine ordnungsgemässe Funktionalität getestet werden. Aufgabe • Überlegen Sie sich in diesem Teil der Übung eine (x)HTML-Seite, welche die Automatisierung eines solchen JUnit Tests ermöglicht. • Diese Seite soll als wohlgeformtes HTML, d.h. als XHTML konzipiert werden. 2 Ein JUnit Web-Server Um den HTMLProvider zu testen, ist es notwendig ihm eine Web-Addresse, z.B. http://www.google.de zu übergeben und dann zu prüfen, ob die richtige Antwort zurückkommt. Nur was ist die richtige Antwort und wer garantiert, dass der Server gerade online und erreichbar ist? Der Test wird bei fehlender Netzwerkverbindung fehlschlagen, obwohl der HTMLProvider im Prinzip funktionieren würde. Ein solcher Test ist also nicht sehr aussagekräftig. Besser ist es einen einfachen Web-Server zu entwickeln, der direkt im JUnit-Test instanziert werden kann und eine wohldefinierte Antwort liefert, die im Test automatisiert auswertbar ist. 1 Aufgabe • Entwickeln Sie einen HTML-Server der eine Testseite, wie in der vorherigen Übungsaufgabe besprochen, generiert und an den aufrufenden Client zurückliefert. • Eine gülitige HTTP Antwort enthält einen Response-Code, mit der Angabe des MIME-Type und der Länge des Inhalts1 . Die Response-Codes sind als RFC beschrieben und z.B. unter der URL http://www.html-world.de/program/http_8.php zu finden. Beispiel (1) zeigt die OK-Antwort des Servers. • Überlegen Sie die Verwendung des Servers in einen HTMLProviderTest. Tip Zur Entwickung benötigen Sie die Klassen ServerSocket und Socket aus dem java.io-Paket. Das ServerSocket wartet (blockierend!) beim Aufruf der accept-Methode auf eine hereinkommende Anfrage. Sobald diese eintrifft wird ein Client-Socket zurückgeliefert. Dieses wird zur weiteren Kommunikation verwendet. Mit dessen InputStream können die Eingaben des Client(Browsers) abgefragt werden und in dessen OutputStream werden die Antworten zurückgeschrieben. Unter der URL http://en.wikipedia.org/wiki/Server_socket finden Sie als Pseudocode die wesentliche Interaktion, die mit Hilfe der angegebenen Java Klassen leicht zu implementieren ist. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 HTTP/1.1 200 OK\r\n Server: JUnit−TestServer\r\n Date: Sun 31. Mai 2008 10:41:23 CEST\r\n Content−Type: text/html\r\n Content−Length: 398\r\n \r\n <?xml version=”1.0” encoding=”UTF−8”?> <!DOCTYPE html PUBLIC ”−//W3C/DTD/ XHML 1.0 Strict//EN” ”http://www.w3.org/TR/xhtml1/DTD/xhtml1−strict.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <title>JUnit−TestServer</title> </head> <body> ... Listing 1: HTTP-Response Auszug des JUnit Web-Servers 1 Siehe den Wireshark Bildschirmausdruck eines Web-Response im Vorlesungsskript. 2