Artemis: Unterschied zwischen den Versionen

Aus Programmieren-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 9: Zeile 9:
Einige IDE's bieten dafür spezielle Interfaces, die das Handhaben vereinfachen:
Einige IDE's bieten dafür spezielle Interfaces, die das Handhaben vereinfachen:
=== IntelliJ===
=== IntelliJ===
[[Datei:Artemis Push IntelliJ.gif|border|800px]]
[[Datei:Artemis Push IntelliJ.gif|800px]]


===Eclipse ===
===Eclipse ===

Version vom 12. Februar 2024, 13:34 Uhr

🚧 Diese Seite befindet sich in Bearbeitung 🚧

Was ist Artemis?

Wie klone ich ein Projekt von Artemis?

Wie lade ich eine neue Version meines Projektes auf Artemis hoch?

Wie zuvor erwähnt benutzen wir Git für die Verwaltung der Abgaben. Entsprechend werden die von euch erstellen Versionen auch mit diesem Tool hochgeladen.

Einige IDE's bieten dafür spezielle Interfaces, die das Handhaben vereinfachen:

IntelliJ

Datei:Artemis Push IntelliJ.gif

Eclipse

Was bedeuted mein Ergebnis?

Wie oben zu sehen gibt es einige interessante Stellen im Feedback.

  1. Hier findest du einen Link zu dem Commit, der Bewertet wurde. Das ist in der Regel die letzte Version die hochgeladen wurde.
  2. In diesem Block sind Tests zu finden, die Fehlgeschlagen sind. Meißt steht dabei, wo genau, was gesendet wurde und was erwartet wurde. Auch zu finden ist hier eine Aufbröselung des Feedbacks und in welchen Kategorien es Abzüge gab und auch wie viel.
  3. Hier sind Kommentare zu den einzelnen Abzügen zu finden, sowie Tipps und Tricks der Tutoren. Auch zu finden sind hier Anmerkungen zu Stellen, die zukünftig Abzug geben würden.
  4. Hier werden alle Tests angezeigt, die erfolgreich waren. Auch stehen dort die Punkte, die für jeden einzelnen Test vergeben wurden.

Es ist etwas schief gelaufen.. was tu ich jetzt?

Eigene lokale tests funktionieren, in Artemis jedoch nicht

Code zu Testen ist eine Wissenschaft für sich und wird oft nicht korrekt umgesetzt. Da sporadisch geschriebene Tests oft visuell validiert werden, liegt darin, neben dem Mensch selbst, auch das größte Fehlerpotenzial. Insbesondere sind Leerzeichen am Ende der Zeile, oder fehlende/zusätzliche Zeilenumbrüche nicht/schwer erkennbar. Dadurch scheint es, als würden die Beispielinteraktionen korrekt umgesetzt werden, wird es tatsächlich jedoch nicht, was in Artemis zum Nichtbestehen der Tests führt. Zudem sollte sichergestellt werden, dass die Interaktionen tatsächlich korrekt eingegeben werden, hierbei hilft oft direktes Kopieren aus den Aufgaben, oder den Fehlermeldungen in Artemis.

Zudem sollten Systemabhängigkeiten vermieden werden, da die Tests nicht zwangsläufig auf dem gleichen System ausgeführt werden. Eine häufige Fehlerquelle hierbei sind wieder Zeilenumbrüche, die je nach System unterschiedlich sein können.

Exited Prematurely

Diese Meldung bedeutet, dass das Durchlaufen der Beispielinteraktion/Protokolle frühzeitig beendet wurde, also noch Ein-/Ausgaben erwartet werden. Was genau erwartet wird, kann unterschiedlich sein. Häufig liegt es daran, dass die Ausgaben nicht mit einem Zeilenumbruch (System.lineSeparator()) abgeschlossen wurden, beziehungsweise System.out.print() statt System.out.println() verwendet wurde, oder gar ganze Zeilen in der Ausgabe fehlen.

Build gescheitert

Wenn der Build scheitert, liegt ein Compilation Error vor, der Code ist also nicht kompilierbar. Der Grund dafür wird angezeigt, dazu muss gegebenenfalls runtergescrollt werden, ist allerdings immer rot markiert und daher gut zu finden:

Bild

Die Fehlermeldung wird automatisch erzeugt und ist daher nicht 100%ig genau. Es wird die betroffene Klasse angezeigt, die Zeilen und Zeichennummer sowie eine kurze Beschreibung des Fehlers. Wenngleich die Beschreibung manchmal irreführend ist, so ist die Klassen- und Zeilenangabe meist ausreichend, um den Fehler zu identifizieren. In diesem Beispiel wurde der Kompilierungsfehler in der Klasse TicTacToe in Zeile 87 erzeugt.

UnsupportedOperationException: Implementation missing

Die Vorlagen enthalten manchmal bereits Code, der zur Vereinfachung verwendet werden kann. Darin wird meist eine UnsupportedOperationException geworfen, um bei den Tests direkt anzuzeigen, dass die Klassen nicht fertig implementiert sind, bzw. etwas vergessen wurde. Der Wurf dieser Exception muss entfernt und mit dem eigenen Code ersetzt werden. Wird dieser Fehler dennoch angezeigt, so liegt es daran, dass die Exception noch enthalten ist, gegebenenfalls weil die Vorlage gar nicht verwendet wurde, aber sich dennoch in der Abgabe befindet.

Use of illegal class or package

In diesem Modul ist es nicht erlaubt bestimmte Elemente der Java API zu nutzen, dies hat vor allem didaktische Gründe. Den Bearbeitungshinweisen am Anfang jedes Blattes ist zu entnehmen, welche Pakete, oder Klassen (nicht) erlaubt sind. Einzelne Aufgaben können diese Regelung weiter Einschränken.

A class which name is [...] could not be found

Wenn in der Abgabe eine geforderte Klasse nicht gefunden werden kann, erfüllt diese nicht eine der folgenden Anforderungen:

  • Die Klasse ist public
  • Alle Klassen besitzen eine gültige Paket Deklaration passend zu ihrem Ordner
  • Die Klassen liegen nicht außerhalb des "src" Ordners
  • Alle Java Quellcode Dateien enden mit ".java"

Main method could not be resolved

Folgende Kriterien müssen erfüllt sein, damit die main() gefunden werden kann:

  • Die main-Methode muss static sein
  • Die Klasse und die Methode müssen public sein
  • Alle Klassen besitzen eine gültige Paket Deklaration passend zu ihrem Ordner
  • Die Klassen liegen nicht außerhalb des "src" Ordners
  • Alle Java Quellcode Dateien enden mit ".java"

AssertionError: Main class found at [...] cannot be accessed

Hier konnte die main() zwar gefunden werden, die Klasse, in der sie sich befindet, besitzt allerdings eine eingeschränke Sichtbarkeit. Die Klassen, die die main() enthalten, müssen immer public sein.

Missing package declaration

Alle Klassen sollen in einem, ihrer Domäne passendem, Paket liegen. Klassen ohne Paketdeklaration, die also im Standardordner "src" liegen, erzeugen diesen Fehler. Mehr zu Paketen siehe Pakete.

Class Load Test fehlgeschlagen

In diesem Fall könnten Sie ein falsches Paket deklariert haben, z.B lautet die erste Zeile in Ihrer Datei `package example`, aber Ihre Datei liegt im src-Ordner, wobei diese nach Paket-Deklaration im Ordner example liegen muss (und der example-Ordner im src-Ordner). Mehr zu Paketen siehe Pakete.

Expected [...] a string matching the pattern <^Error: .*> bzw. <^(?!Error: ).*$>

Im weiteren Verlauf des Übungsbetriebes werdet ihr mit dem Ausgeben von Fehlermeldungen konfrontiert. Artemis kann und wird auch diese prüfen. Genauer: Artemis wird überprüfen, ob eine Fehlermeldung ausgegeben werden soll oder nicht und ob sie richtig formatiert ist. Hierbei werdet ihr auf die im Titel gezeigten, sogenannten "Regex", stoßen.

(Das Wort Error in diesem Beispiel kann je nach Aufgabenstellung variieren. Zum Beispiel kann auch ERROR vorkommen. Dann ist die erwartete Ausgabe entsprechend dem Wort)

<^Error: .*>

Die Ausgabe war keine Fehlermeldung oder falsch formatiert. Artemis erwartet dann eine Ausgabe, die mit "Error: " anfängt und mit einer beliebige Zeichenkette endet.

<^(?!Error: ).*$>

Die Ausgabe war eine Fehlermeldung bzw. hat mit "Error: " angefangen. Artemis erwartet in diesem Fall aber keine Fehlermeldung.

Hier die Erklärung zum Regex:

  • ^ Markiert den Anfang der Zeile.
  • (?![...]) Ist ein sogenannter "negative lookahead". Das heißt, dass die ausgegebene Zeile nicht die Zeichenkette innerhalb der Klammer, nach dem ?! beinhalten darf.
  • .* Ist eine Zeichenkette beliebiger Länge.
  • $ Markiert das Ende der Zeile.

Quelle: Regex101


Zurück zur geht es hier:

Hauptseite