0

Die Standardkonfiguration für JUnit-Tests in IntelliJ (v2016.3) besteht darin, vor dem Start Build auszuführen. Normalerweise ist dies eine gute Sache, da es sicherstellt, dass alle Änderungen vor dem Ausführen der Tests angewendet wurden. Es scheint jedoch die kompilierten Klassen generierten Code zu löschen. Wie zu erwarten, bedeutet dies, dass Tests fehlschlagen, weil die Tests für die generierten Klassen die zu testende Klasse nicht mehr finden können!Wie kann verhindert werden, dass IntelliJ Klassen entfernt, die aus generierten Quellen kompiliert wurden, wenn Tests ausgeführt werden?

Wie behalte ich IntelliJs Standardverhalten "Vor dem Start erstellen", ohne dass meine kompilierten Klassen beim Ausführen von Tests weggeblasen werden?

Jetzt für einige Details.

Ich benutze die Immutables Bibliothek (nicht Lombok), also ist es Code, der mit den "normalen" Java Annotations-Mechanismen generiert wird. IntelliJ nimmt die Änderungen freudig entgegen und generiert den Java-Code über die Annotationen. Es wird auch die aktualisierten generierten Java-Dateien kompilieren, wenn sie sich ändern. Das allgemeine "Build automatisch" -Verhalten scheint also zu funktionieren. Für mich scheint dies darauf hinzuweisen, dass ich den Annotation-Prozessor korrekt eingerichtet habe.

Wenn ich manuell "Build-Modul" ausführen oder wenn "Build" vor Tests ausgeführt wird, werden die Klassendateien für die generierten Java-Dateien jedoch entfernt. Die generierten Java-Dateien werden in keiner Weise geändert, aber die Klassendateien, in die sie kompiliert werden, werden entfernt. Für mich bedeutet das, dass etwas mit Build nicht die Abhängigkeiten von generierten Quellen berücksichtigt.

Eine Sache, die ich bemerkt habe ist, dass, wenn ich nicht das Verzeichnis markieren, in die Quellen als generierte Source Root erzeugt werden, diese „löschen Sie die Klassendateien von generierten Quelldateien“ Verhalten nicht geschieht. Der Nachteil davon ist, dass IntelliJ die generierten Klassen nicht mehr erkennt und sie im Code, der sie verwendet, als unbekannt markiert.

Wie ich IntelliJ konfiguriert:

  • Preferences -> Annotation ProcessorsModule content root verwendet, Obtain processors from project classpath und hat die Produktions- und Testquellen Verzeichnisfelder angegeben (und scheint jene respektieren, wenn die Quelldateien zu erzeugen)
  • Preferences -> Compiler ist nichtClear output directory on rebuild und verwendet, ist mit Build project automatically
  • File -> Other Settings -> Annotation Processors hat die gleichen Konfigurationen wie in den beiden oben genannten Punkte angegeben
  • Das Verzeichnis der Quellen in wird erzeugt werden als Erzeugte Quellverzeichnis

Ich habe bashing meinen Kopf gegen das viel zu lange markiert ist, versucht alles, woran ich denken kann, und alles, was irgendjemand andeutet, aber ohne Erfolg. Jede Hilfe, wie dies funktioniert (außer "Entfernen der Build-Option von der Test-Konfiguration") wäre unglaublich hilfreich und sehr geschätzt.

Antwort

0

Ich hatte das gleiche Problem, das (für mich) gelöst wurde, indem das Atlassian Clover Plug-in entfernt wurde.

Verwandte Themen