Java
Im Beispiel-Repository befinden sich Beispielaufgaben.
Tests
Es wird JUnit 4 (junit-4.12) als Testframework verwendet. Testfälle müssen daher mit JUnit 4 kompatibel sein.
Sollte der Code under Test die Aktivierung von Assertions erfordern, dürfen diese nicht dynamisch über einen static Initializer-Block in den Testklassen aktiviert werden:
public class SampleTest {
static {
ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
}
}
Das ist fehleranfällig. Sollte der Code under Test beispielsweise vorher aus anderen Gründen durch den Testrunner geladen werden, wird das nicht funktionieren. Stattdessen müssen Assertions über den entsprechenden Parameter aktiviert werden.
Code Coverage
Aktuell werden folgende Werkzeuge für die Erfassung der Code Coverage unterstützt:
- OpenClover (Sourcecode Instrumentierung)
- JaCoCo (Bytecode Instrumentierung)
OpenClover ist aktuell jedoch in einem eher schlechten Zustand. Es ist veraltet und unterstützt aktuelle Sprachfeatures (Records, ...) nicht. Aktuell arbeitet der Entwickler am Support für neuere Sprachfeatures. Offiziell wird nur Java 8 unterstützt, es klappt aber auch bei höheren Versionen (sofern die neuen Features nicht verwendet werden).
Umgebungen
Für die Ausführung der Testfälle wird unser EJUnit Runner verwendet. Die Umgebungen für die verschiedenen Java-Versionen beinhalten unterschiedliche Bibliotheken:
Umgebung | Bibliotheken |
---|---|
java17 | H2 Datenbanktreiber |
java19 | H2 Datenbanktreiber |
java20 | H2 Datenbanktreiber, MongoDB Datenbanktreiber, bson , ANTLR |
Für die genauen Versionen bitte im Dockerfile
nachsehen.
Evaluatoren
Es gibt mehrere Evaluatoren für Java, die auf mehreren Umgebungen (für unterschiedliche Versionen von Java) verwendet werden können.
Evaluator | Beschreibung |
---|---|
java | Führt alle Testfälle in einem Prozess aus. Bei einem Timeout wird der Prozess abgebrochen |
javaie | Führt alle Testfälle jeweils in einem eigenen Prozess aus. Bei einem Timeout wird mit dem nächsten Testfall fortgefahren |
Es sind die aktuellen preview features der entsprechenden Javaversion freigeschaltet. Zudem können die folgenden Parameter verwendet werden:
- Assertions (
assert
) können mit dem Parameterjvm.enable_asserts
aktiviert oder deaktiviert werden. Standardmäßig sind Asserts deaktiviert. - Die Erfassung von Code Coverage kann mit
coverage.enabled
aktiviert oder deaktiviert werden. Standardmäßig deaktiviert. - Das Werkzeug für die Instrumentierung kann über den Parameter
coverage.tool
angegeben werden. (jacoco
,clover
)
Hinweise zum Docker Image
Skripte und andere Dateien für die Java Evaluators werden im Repository unter
evaluators/shared/java
organisiert.