Verified Commit 32971507 authored by Daniel Mangold's avatar Daniel Mangold
Browse files

Added readme, changelog and version file

parent 86a4ae48
1.0
src/test/java/h05/Utils.java 728be94244856686e8dcdbbfd142b529
src/test/java/h05/Assertions.java 02349c33cf60fea1b77b0c457bf1fad8
src/test/java/h05/ListItemTest.java d746f290bee1694c5b79e77538c86fa5
src/test/java/h05/MyTreeNodeTest.java d2de48e7fa2087a08fc6d81fdb273064
src/test/java/h05/MyTreeTest.java 0518763edafad0433db866dd6e0ef743
src/test/java/h05/MyParenthesesTreeIteratorTest.java d27df229e85ac37cf782ab0d5061ecae
src/test/java/h05/provider/TreeProvider.java 955510b43e5a8b60e0d92aebbdf1b6a9
src/test/java/h05/provider/RandomTreeProvider.java 61e0086e05bde7f9faa60d570000804d
\ No newline at end of file
# Community Tests für die fünfte Hausübung der AuD 2021
Zum Ausführen der Tests sollte eine [eigene JUnit Run Configuration](https://git.rwth-aachen.de/groups/aud-tests/-/wikis/JUnit-Run-Configuration) angelegt werden, da durch den gradle task nicht alle Meldungen angezeigt werden (z.B. warum Tests ignoriert werden).
Da einige Methoden intern nach bestimmten Anforderungen aufgebaut sein müssen, aber man mit Black-box testing (worunter diese Tests fallen) dabei nur bedingt Aussagen über die Korrektheit treffen kann, weil die Ergebnisse identisch sind, wird bei manchen Tests nur geprüft, ob die jeweiligen Definitionen und Rückgaben korrekt sind. Ob das bei einem bestimmten Test der Fall ist, steht in den Beschreibungen der jeweiligen Methoden.
Mit * markierte Methoden testen, ob die jeweilige Klasse bzw. Interface korrekt definiert ist. Sie sind an sich keine Testmethoden und nur in Verbindung mit "richtigen" Tests, also mit `@Test` oder vergleichbar annotierten Methoden, brauchbar.
Die Tests haben einen Update-Mechanismus / Installer, der vor jeder Ausführung nach Updates sucht. Da das einige Sekunden in Anspruch nehmen kann und vielleicht auch anderweitig nicht gewünscht ist, kann diese Funktionalität ausgeschaltet werden. Wird diese Funktionalität verwendet, muss das Arbeitsverzeichnis gleich dem Projektordner sein. Das Verhalten kann mit Änderung der folgenden Konstanten in [`Utils.java`](src/test/java/h05/Utils.java) verändert werden:
- `CHECK_FOR_UPDATES` <br>
Bestimmt, ob nach Updates gesucht wird. Ist diese Konstante `true`, dann wird bei jeder Ausführung der Tests nach Updates in diesem Repository gesucht und eine Meldung ausgegeben, sollten welche verfügbar sein. Ist sie `false` wird nicht nach Updates gesucht und andere Einstellungen werden ignoriert.
- `CHECK_HASHES` <br>
Gibt an, ob die MD5-Hashes der lokalen Tests mit denen im Repository abgeglichen werden sollen. Hat die Konstante den Wert `true`, dann werden die Hashes der Dateien in [`.test_version`](.test_version) mit den tatsächlichen verglichen und eine Meldung ausgegeben, sollten sie nicht übereinstimmen.
- `AUTO_UPDATE` <br>
Entscheidet, ob verfügbare Updates automatisch heruntergeladen werden sollen. Wenn aktiviert, werden Dateien, deren Hashes nicht übereinstimmen, erneut aus dem Repository heruntergeladen, wenn ein Update verfügbar ist. Diese Option ignoriert `CHECK_HASHES`, sollte die lokale Kopie der Tests veraltet sein. Da der Inhalt der Dateien überschrieben wird, werden lokale Änderungen an den Tests verloren gehen!
Standardmäßig sind alle Optionen aktiviert.
DISCLAIMER: Das Durchlaufen der Tests ist keine Garantie dafür, dass die Aufgaben vollständig korrekt implementiert sind.
<br>
## ListItemTest
### .checkClass()* / .classDefinitionCorrect()
Überprüft, ob die Definition der Klasse `ListItem` korrekt ist. Testet, dass …
- die Klasse generisch ist und einen Typparameter `T` hat
- die Klasse nicht abstrakt ist
- die Klasse einen parameterlosen Konstruktor hat
- die Klasse die Attribute `key` vom Typ `T`und `next` vom Typ `ListItem<T>` hat
## MyTreeNodeTest
Setzt voraus, dass `ListItem` richtig definiert ist.
### .checkClass()*
Überprüft, ob die Definition der Klasse `MyTreeNode` korrekt ist. Testet, dass …
- die Klasse public ist
- die Klasse nicht generisch ist
- die Klasse nicht abstrakt ist
- die Klasse einen public Konstruktor mit formalem Typ `long` als ersten Parameter hat
- die Klasse die im Übungsblatt vorausgesetzten Attribute `nodeID` und `successors` besitzt
### .testFields()
Testet, ob die Attribute eines Objekts der Klasse die korrekten Werte nach der Instantiierung haben.
## MyTreeTest
Setzt voraus, dass `MyTreeNode` richtig definiert ist.
### .checkClass()*
Überprüft, ob die Definition der Klasse `MyTree` korrekt ist. Testet, dass …
- die Klasse nicht generisch ist
- die Klasse das Interface `Iterable<Character>` implementiert und nicht abstrakt ist
- die Klasse einen public Konstruktor mit einem Parameter vom formalen Typ `Reader` und einen Parameter vom formalen Typen `boolean` hat
- die Klasse die im Übungsblatt vorausgesetzten Attribute `root` und `nextNodeID` besitzt
### .testConstructor(String, Boolean)
Überprüft, ob der Konstruktor die Variable `root` richtig initialisiert und testet dabei indirekt die Methoden `buildRecursively` und `buildIteratively`. Der Konstruktor wird mit vorgegebenen Strings (valide sowie invalide Klammerausdrücke) als ersten Parameter und zufällig mit `true` und `false` als zweiten Parameter aufgerufen.
### .testIterator()
Überprüft, ob die Methode `iterator` eine Instanz von `MyParenthesesTreeIterator` zurückgibt.
### .testIsIsomorphic(String)
Überprüft, ob die Methode `isIsomorphic` korrekt funktioniert.
## ParenthesesTreeIteratorTest
Setzt voraus, dass `MyTree` richtig definiert ist.
### .checkClass()*
Überprüft, ob die Definition der Klasse `MyParenthesesTreeIterator` korrekt ist. Testet, dass …
- die Klasse nicht generisch ist
- die Klasse das Interface `Iterator<Character>` implementiert und nicht abstrakt ist
### .testNext(String)
Setzt voraus, dass `MyTree#iterator()` richtig definiert ist.
Überprüft, ob die Methode `next` mit zufälligen Klammerausdrücken wie erwartet funktioniert.
### .testHasNext(String)
Setzt voraus, dass `MyTree#iterator()` und `MyParenthesesTreeIterator#next()` richtig definiert sind.
Überprüft, ob die Methode `hasNext` mit zufälligen Klammerausdrücken wie erwartet funktioniert.
### .testRemove()
Überprüft, ob die Methode `remove` wie erwartet nur eine `UnsupportedOperationException` wirft.
### Version 1.0
Initial tests
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment