JUnit zum Classpath hinzufügen – Eclipse Kepler + PGP HA3 Testklasse

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:

  1.  Rechts klick aufs Projekt, ganz unten properties auwählen1
  2. Links Java Build Path auswählen und rechts auf Add Library klicken2
  3.  JUnit auswählen und Next drücken3
  4. Sicherstellen, dass JUnit 4 ausgewählt ist und mit Finish bestätigen4
  5. 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
	}

}

Published by

Kordian Bruck

I'm a TUM Computer Science Alumni. Pizza enthusiast. Passionate for SRE, beautiful Code and Club Mate. Currently working as an SRE at Google. Opinions and statements in this blog post are my own.

Leave a Reply