Zum Hauptinhalt springen

Java

Beispiele

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:

UmgebungBibliotheken
java17H2 Datenbanktreiber
java19H2 Datenbanktreiber
java20H2 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.

EvaluatorBeschreibung
javaFührt alle Testfälle in einem Prozess aus. Bei einem Timeout wird der Prozess abgebrochen
javaieFü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 Parameter jvm.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.