# Community Tests für die fünfte Hausübung der AuD 2021
**Änderung ab Version 2.0.0**: Die Tests sind ab Version 2.0.0 möglicherweise nicht zu 100% rückwärtskompatibel und sollten deswegen erneut heruntergeladen werden. Außerdem hängen sie von der Bibliothek JSON-java ab. Mehr dazu [hier](https://git.rwth-aachen.de/groups/aud-tests/-/wikis/JSON-Bibliothek). \
Einstellungen für die Tests wurden in die Datei [`Config.java`](src/test/java/h05/Config.java) ausgelagert. Dort findet sich auch die Dokumentation über die jeweiligen Konstanten.
<br>
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:
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 [`Config.java`](src/test/java/h05/Config.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.
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_metadata.json`](.test_metadata.json) 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!
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 (gilt standardmäßig nicht für `Config.java`)!