Um JUnit Tests ausführen zu können, muss man Eclipse erst mitteilen, wo sich genau dazu die Libraries befinden. Hier eine Step by Step Anleitung für Dummies:
- Rechts klick aufs Projekt, ganz unten properties auwählen
- Links Java Build Path auswählen und rechts auf Add Library klicken
- JUnit auswählen und Next drücken
- Sicherstellen, dass JUnit 4 ausgewählt ist und mit Finish bestätigen
- Fertig
Ab sofort könnt ihr sogenannte Testklassen in eurem Projekt verwenden, welche man separat starten kann (in etwa wie eine Klasse mit main Funktion)
Die Testklasse für die HA3 des EIDI PGP Praktikums findet ihr hier nochmal komplett. Wer Fehler findet bitte gern unter: bruck@in.tum.de
Bitte beachten: Wenn ihr die Klasse mit hochladet auf den Submission Server, wird das eventuell als Abschreiben gewertet!! Ich übernehme keine Haftung dafür, wenn ihr aus dem PGP rausfliegt!
Changelog
- 1.6: Date überprüfungen an Musterlösung angepasst
- 1.5: Korrekturen & Test für Sortierung hinzugefügt
- 1.4: Tests für WordCountArray hinzugefügt
- 1.3: Tests korrigiert, Changelog und FAQ aus Code entfernt
- 1.2: Cases hinzugefügt. Case mit “match” korrigiert. bei “meine” sollte natürlich ein wert für den ersten Text rauskommen.
- 1.1: FAQ hinzugefügt. Kleine Anpassungen.
FAQ
- F: Bei mir funktioniert das nicht?!
- A: JUnit zum Projekt hinzufügen (wie oben beschrieben)
- F: Ist der Pretschner Cool?
- A: 42.
- F: Muss ich wirklich alle Suffixe selber einfügen?
- A: Nein, man kann auch nur zwei oder drei einfügen, bekommt dann aber dementsprechend weniger Punkte 😉
- F: Ich mag nimmer!
- A: Wo ist die Frage?
- F: Kann ich diese Klasse mit hochladen?
- A: Nein, dies führt womöglich zu einem Rauswurf aus dem Praktikum! BITTE JA NICHT ZUSAMMEN MIT ANDEREN DATEIEN HOCHLADEN!!
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import java.util.Random; import org.junit.Before; import org.junit.Test; /** * Test Klasse für die HA3: testet die grundlegende Funktionalitäten * * Realisiert mit JUnit4: Das müsst ihr zuerst zum Project class path dazu tun, damits funktioniert. * * Ich übernehme keine Haftung für kaputte, Tastaturen, Bildschirme oder sonstige Dinge, welche im Laufe der * Programmierung kaputt gehen können. Insbesondere einem rauswurf aus dem PGP :) * * @author Kordian Bruck <bruck@in.tum.de> * @since 23.11.2013 * @version 1.6 * @see http ://kbruck.name/2013/11/23/junit-zum-classpath-hinzufugen-eclipse-kepler/ * */ public class TestHA3 { private Document doc0; private Document doc1; private Author testAuthor; private Date testDate = new Date(24, 12, 1921); @Before public void setup() { testDate = new Date(24, 12, 1921); testAuthor = new Author("Leck", "Mich", testDate, "Daheim 23a, 88888 Zuhausen", "leave@me.alone.forever"); doc0 = new Document( "1t", "de", "1s", new Date(23, 11, 2013), testAuthor, "Meine Einzelteile lagen auf einem langen langen Flur verstreut An den gegenüberliegenden" + " ewig voneinander entfernten Enden an den Wänden am Boden und sogar an der Decke war" + " er über und über von Fenstern winzigen Luken und Türen durchlöchert und genau an jenem" + " Punkt an dem mein Hypothalamus am Fußboden klebte da schnitt der Flur sich selbst in" + " der Unendlichkeit Ich dachte nach doch meine Gedanken brannten wie Darmkrämpfe zuckten" + " wie messerscharfe grelle Blitze Jeder Versuch der siedenden Flut zu entrinnen lief" + " krachend auf Riff und versank unter ohrenbetäubendem Dröhnen in den Untiefen eines" + " fernen tiefschwarzen Nirgendwogens Die Türen über mir und auch jene links und rechts" + " schlugen auf und zu Bald kam es mir vor als gehorche das Geklappere einem geheimen" + " Code der uns in den Wahnsinn treiben sollte"); doc1 = new Document( "1t", "de", "1s", new Date(31, 5, 1900), testAuthor, "Ein Schritt vor den Anderen tastet er sich langsam heran Er hat schon immer den Schleichweg" + " bevorzugt das langsame anpirschen die majestätischste Art und Weise auf Beutejagd zu" + " gehen Mit jedem Schritt den er sich annähert muss er leiser werden Kein Geräusch soll" + " die Ruhe stören kein Knirschen sein Objekt der Begierde aufschrecken Seine Wunden sind" + " entweder gut verdeckt oder schon längst wider verheilt – heute werden sie ihn nicht" + " beinträchtigen Er ist im Moment in seinem Element in ekstatischer Erwartung in seinem" + " inneren außen jedoch vollkommen kühl und gebannt Jedenfalls sollte er das sein wollte er" + " das sein So wird es ablaufen nicht anders er hatte es sich fest vorgenommen – die" + " Vergangenheit zurücklassen nur an heute denken Im Jetzt leben den Augenblick greifen" + " endlich Gewinner sein Er strengt sich an konzentriert sich auf seine eigenen Gedanken" + " wiederholt im Kopf seine Vorsätze Wie kann ich den Augenblick leben fragt er sich Was" + " bedeutet so etwas überhaupt"); } @Test public void testDateEquals() { Date d = new Date(); assertTrue(d.equals(d)); assertFalse(d.equals(new Date(1, 1, 1993))); assertTrue(d.equals(new Date())); assertTrue(testDate.equals(new Date(24, 12, 1921))); } @Test public void testAuthorEquals() { Author d = new Author("fritten", "fritz", testDate, "Hugohausen", "fritzl@ich.de"); assertTrue(d.equals(d)); assertFalse(d.equals(this.testAuthor)); assertTrue(testAuthor.equals(new Author("Leck", "Mich", testDate, "Daheim 23a, 88888 Zuhausen", "leave@me.alone.forever"))); } @Test public void testReviewEquals() { Review d = new Review(testAuthor, doc0, "de_de", testDate, 10); assertTrue(d.equals(d)); assertFalse(d .equals(new Review(testAuthor, doc0, "de_de", testDate, 9))); assertFalse(d .equals(new Review(testAuthor, doc1, "de_de", testDate, 10))); assertTrue(d .equals(new Review(testAuthor, doc0, "de_de", testDate, 10))); } @Test public void testDateWrongNumbers() { Date d = new Date(-1, -1, -100); assertNotEquals(-1, d.getDay()); assertNotEquals(-1, d.getMonth()); assertEquals(d.getYear(), 1900); d.setDay(15); d.setDay(32); assertEquals(31, d.getDay()); d.setMonth(5); d.setMonth(14); assertEquals(12, d.getMonth()); } @Test public void testDocumentEquals() { assertTrue(doc0.equals(doc0)); assertTrue(doc1.equals(doc1)); assertFalse(doc0.equals(doc1)); Document doc2 = new Document( "1t", "de", "1s", new Date(23, 11, 2013), testAuthor, "Meine Einzelteile lagen auf einem langen langen Flur verstreut An den gegenüberliegenden" + " ewig voneinander entfernten Enden an den Wänden am Boden und sogar an der Decke war" + " er über und über von Fenstern winzigen Luken und Türen durchlöchert und genau an jenem" + " Punkt an dem mein Hypothalamus am Fußboden klebte da schnitt der Flur sich selbst in" + " der Unendlichkeit Ich dachte nach doch meine Gedanken brannten wie Darmkrämpfe zuckten" + " wie messerscharfe grelle Blitze Jeder Versuch der siedenden Flut zu entrinnen lief" + " krachend auf Riff und versank unter ohrenbetäubendem Dröhnen in den Untiefen eines" + " fernen tiefschwarzen Nirgendwogens Die Türen über mir und auch jene links und rechts" + " schlugen auf und zu Bald kam es mir vor als gehorche das Geklappere einem geheimen" + " Code der uns in den Wahnsinn treiben sollte"); assertTrue(doc0.equals(doc2)); } @Test public void testWordCountArrayAdd() { int temp = doc0.getWordCounts().size(); doc0.getWordCounts().add("AArmin", -21); doc0.getWordCounts().add(null, -21); doc0.getWordCounts().add("", -21); // None of these should be allowed to be added assertEquals(temp, doc0.getWordCounts().size()); // Try setting some values temp = doc0.getWordCounts().getCount(0); doc0.getWordCounts().setCount(0, -42); assertEquals(temp, doc0.getWordCounts().getCount(0)); doc0.getWordCounts().setCount(0, 0); assertEquals(0, doc0.getWordCounts().getCount(0)); // Sort it doc0.getWordCounts().sort(); // Enlarge it WordCountArray x = new WordCountArray(3); x.add("test1", 1); x.add("test2", 2); x.add("test3", 3); x.add("test4", 4); assertEquals(4, x.size()); } @Test public void testWordArrayLowerCase() { Random rand = new java.util.Random(); WordCountArray x = new WordCountArray(100); x.add("donaudampfschifffahrtselektrizitätenhauptbetriebswerkbauunterbeamtengesellschaft", rand.nextInt(5)); x.add("DONAUDAMPFSCHIFFFAHRTSELEKTRIZITÄTENHAUPTBETRIEBSWERKBAUUNTERBEAMTENGESELLSCHAFT", rand.nextInt(5)); x.add("DonaudampfschifffahrtselektrizitätenhauptbetRiebswerkbauunTerbeamtengesellschaft", rand.nextInt(5)); assertEquals(1, x.size()); } @Test public void testWordCountArraySorting() { WordCountArray x = new WordCountArray(5); x.add("Zebra", 1); x.add("Elefant", 1); x.add("Arbeit", 1); x.add("Leck", 1); x.add("Ski", 1); x.add("Fahren", 1); x.add("Sau", 1); x.add("Geil", 1); x.sort(); assertEquals(0, x.getIndex("arbeit")); assertEquals(1, x.getIndex("elefant")); assertEquals(7, x.getIndex("zebra")); assertEquals(4, x.getIndex("leck")); assertEquals(2, x.getIndex("fahren")); assertEquals(6, x.getIndex("ski")); assertEquals(5, x.getIndex("sau")); x = new WordCountArray(2); x.add("Sau", 1); x.add("Geil", 1); assertEquals(0, x.getIndex("sau")); assertEquals(1, x.getIndex("geil")); x.sort(); assertEquals(1, x.getIndex("sau")); assertEquals(0, x.getIndex("geil")); } @Test public void testDocumentLongestSuffix() { // Wir müssen ab sofort den längsten suffix finden. Einfachste Lösung // dafür ist natürlich Suffices der länge // nach zu sortieren Document d = new Document( "Such mir den längsten", "de", "", new Date(23, 11, 2013), testAuthor, "geiss geisslein arbeitfähig arbeiten arbeit hutab hutiren hutisieren hutmut hutfähig hutig"); // Max size should be 2 assertEquals(3, d.getWordCounts().size()); // These must be -1 - so be in the array assertNotEquals(-1, d.getWordCounts().getIndex("geiss")); assertNotEquals(-1, d.getWordCounts().getIndex("arbeit")); assertNotEquals(-1, d.getWordCounts().getIndex("hut")); // Check the count on these assertEquals(2, d.getWordCounts().getCount(d.getWordCounts().getIndex("geiss"))); assertEquals(3, d.getWordCounts() .getCount(d.getWordCounts().getIndex("arbeit"))); assertEquals(6, d.getWordCounts().getCount(d.getWordCounts().getIndex("hut"))); // These can't be in the array assertEquals(-1, d.getWordCounts().getIndex("geisslein")); assertEquals(-1, d.getWordCounts().getIndex("arbeiten")); assertEquals(-1, d.getWordCounts().getIndex("arbeitfähig")); assertEquals(-1, d.getWordCounts().getIndex("hutab")); assertEquals(-1, d.getWordCounts().getIndex("hutiren")); assertEquals(-1, d.getWordCounts().getIndex("hutisieren")); assertEquals(-1, d.getWordCounts().getIndex("hutmut")); assertEquals(-1, d.getWordCounts().getIndex("hutfähig")); assertEquals(-1, d.getWordCounts().getIndex("hutig")); } @Test public void testDocumentCollectionOperations() { DocumentCollection d = new DocumentCollection(); // Perform some operations on this document d.addFirst(doc1); d.addFirst(doc0); d.addFirst(doc0); d.addLast(doc1); d.addLast(doc0); d.addLast(doc1); // Test the size thingy assertEquals(d.size(), 6); // Some more operations d.removeFirst(); d.removeLast(); assertEquals(d.size(), 4); d.remove(0); assertEquals(d.size(), 3); assertTrue(d.get(0).equals(doc1)); assertTrue(d.get(1).equals(doc1)); assertTrue(d.get(2).equals(doc0)); // Test shorthand methodes assertTrue(d.getFirst().equals(doc1)); assertTrue(d.getLast().equals(doc0)); // Contains assertTrue(d.contains(doc0)); assertTrue(d.contains(doc1)); d.removeLast(); assertFalse(d.contains(doc0)); assertTrue(d.contains(doc1)); DocumentCollection dempty = new DocumentCollection(); assertFalse(dempty.contains(doc0)); assertFalse(dempty.contains(doc1)); } @Test public void testDocumentCollectionCount() { DocumentCollection d = new DocumentCollection(); d.addLast(doc0); d.addLast(doc1); assertEquals(d.size(), 2); // Test the proccessing of the items int i = 0; assertEquals(0, d.get(i).getWordCounts().getIndex("meine")); assertEquals( 2, d.get(i).getWordCounts() .getCount(d.get(i).getWordCounts().getIndex("meine"))); i = 1; assertEquals(-1, d.get(i).getWordCounts().getIndex("meine")); assertEquals( -1, d.get(i).getWordCounts() .getCount(d.get(i).getWordCounts().getIndex("meine"))); } @Test public void testDocumentCollectionEmpty() { DocumentCollection d = new DocumentCollection(); d.addLast(doc0); d.addLast(doc1); assertFalse(d.isEmpty()); assertTrue(d.remove(1)); assertEquals(1, d.size()); d.removeLast(); assertEquals(0, d.size()); assertTrue(d.isEmpty()); DocumentCollection empty = new DocumentCollection(); assertTrue(empty.isEmpty()); } @Test public void testDocumentCollectionIndexOf() { DocumentCollection d = new DocumentCollection(); d.addLast(doc0); d.addLast(doc1); d.addFirst(doc1); assertEquals(1, d.indexOf(doc0)); assertEquals(0, d.indexOf(doc1)); assertEquals(-1, d.indexOf(new Document("Hans im Glueck", "", "", new Date(), new Author("", "", new Date(), "", ""), "hans hatte sieben jahre bei seinem herrn gedient da " + "sprach er zu ihm herr meine zeit ist herum nun " + "wollte ich gerne wieder heim zu meiner mutter " + "gebt mir meinen lohn"))); d.remove(1); assertEquals(-1, d.indexOf(doc0)); d.remove(1); assertEquals(0, d.indexOf(doc1)); d.remove(0); assertEquals(-1, d.indexOf(doc1)); } @Test public void testDocumentCollectionNullDoc() { DocumentCollection d = new DocumentCollection(); d.addLast(null); d.addLast(null); // Soll nicht möglich sein assertEquals(0, d.size()); } @Test public void testDocumentCollectionMatch() { DocumentCollection d = new DocumentCollection(); d.addLast(doc0); d.addLast(doc1); d.match("meine"); // Test the proccessing of the items assertEquals(0.1148969979242852, d.getQuerySimilarity(0), 0.0); assertEquals(0, d.getQuerySimilarity(1), 0.0); } // Tests lt. Beispiel @Test public void testDocumentCollectionMatch2() { DocumentCollection d = new DocumentCollection(); d.addLast(new Document("Der Wolf und die 7 Geisslein", "", "", new Date(), new Author("", "", new Date(), "", ""), "es war einmal eine alte geiss die hatte sieben" + " junge geisslein und hatte sie lieb wie eine" + " mutter ihre kinder lieb hat")); d.addLast(new Document("Tischlein deck dich", "", "", new Date(), new Author("", "", new Date(), "", ""), "vor zeiten war ein schneider der drei söhne hatte und nur eine einzige ziege")); d.addLast(new Document("Hans im Glueck", "", "", new Date(), new Author("", "", new Date(), "", ""), "hans hatte sieben jahre bei seinem herrn gedient da " + "sprach er zu ihm herr meine zeit ist herum nun " + "wollte ich gerne wieder heim zu meiner mutter " + "gebt mir meinen lohn")); // Count - hans WordCountArray x = d.get(0).getWordCounts(); assertEquals(-1, x.getCount(x.getIndex("hans"))); x = d.get(1).getWordCounts(); assertEquals(-1, x.getCount(x.getIndex("hans"))); x = d.get(2).getWordCounts(); assertEquals(1, x.getCount(x.getIndex("hans"))); // Count - geiss x = d.get(0).getWordCounts(); assertEquals(2, x.getCount(x.getIndex("geiss"))); x = d.get(1).getWordCounts(); assertEquals(-1, x.getCount(x.getIndex("geiss"))); x = d.get(2).getWordCounts(); assertEquals(-1, x.getCount(x.getIndex("geiss"))); // Match d.match("hans"); assertEquals(0.17407765595569785, d.getQuerySimilarity(0), 0.0); assertEquals(0, d.getQuerySimilarity(1), 0.0); assertEquals(0, d.getQuerySimilarity(2), 0.0); d.match("ziege"); assertEquals(0.2672612419124244, d.getQuerySimilarity(0), 0.0); assertEquals(0, d.getQuerySimilarity(1), 0.0); assertEquals(0, d.getQuerySimilarity(2), 0.0); d.match("hatte"); assertEquals(0.3651483716701107, d.getQuerySimilarity(0), 0.0); assertEquals(0.2672612419124244, d.getQuerySimilarity(1), 0.0); assertEquals(0.17407765595569785, d.getQuerySimilarity(2), 0.0); // Gleiches mit Großschreibung des Suchwortes d.match("haTTe"); assertEquals(0.3651483716701107, d.getQuerySimilarity(0), 0.0); assertEquals(0.2672612419124244, d.getQuerySimilarity(1), 0.0); assertEquals(0.17407765595569785, d.getQuerySimilarity(2), 0.0); } @Test public void testDocumentCollectionIntegrity() { DocumentCollection d = new DocumentCollection(); assertTrue(d.isEmpty()); // Perform some operations d.addFirst(doc0); d.addLast(doc1); d.addLast(null); d.addFirst(doc1); d.addFirst(doc0); // zwischendrinn mal testen assertFalse(d.isEmpty()); assertEquals(4, d.size()); d.remove(2); d.remove(0); assertEquals(2, d.size()); d.addLast(doc1); d.addLast(doc0); // Sturktur sollte sein: doc1,doc1,doc1,doc0 assertEquals(4, d.size()); assertEquals(3, d.indexOf(doc0)); assertEquals(0, d.indexOf(doc1)); assertFalse(d.isEmpty()); } @Test public void testDocumentCollectionRemoveIndex() { DocumentCollection d = new DocumentCollection(); d.addLast(doc0); d.addLast(doc1); d.addFirst(doc0); d.addFirst(doc1); assertFalse(d.remove(-1));// auserhalb wertebereich assertFalse(d.remove(4));// auserhalb wertebereich assertTrue(d.remove(3));// removelast assertFalse(d.remove(3));// removelast überprüfen assertTrue(d.remove(0));// removefirst d.addLast(doc0); d.addLast(doc1); d.addFirst(doc0); d.addFirst(doc1); assertTrue(d.remove(4)); // remove irgendeins in der mitte } }