2016-08-05 15 views
0

Ich debugge eine Tomcat-Webanwendung und stieß auf eine Klasse, die eine Hauptmethode mit etwas Testcode enthält.Zweck der Hauptmethode in der Java-Webanwendung

Gibt es eine Möglichkeit zu sagen, ob dies von der Webanwendung aus aufgerufen wird? Oder war das nur ein Weg des vorherigen Entwicklertests in ihrer IDE-Umgebung?

+6

Es ist in der Regel ein veralteter Ansatz, um Tests zu schreiben, die Verwendung von etwas wie Junit oder Testng ist ein moderner/konventioneller Ansatz. Tomcat hat eine eigene Hauptmethode, um Tomcat zu starten, und wird meines Wissens keine anderen Hauptmethoden aufrufen (es sei denn, es wird direkt von einem Servlet oder ähnlichen aufgerufen). – Taylor

+0

Ihre IDE sollte Ihnen die Anrufer für eine bestimmte Methode zeigen können, damit Sie sicherstellen können, dass sie nicht verwendet wird. Und wenn die Methode * in Verwendung ist, erhalten Sie einen Fehler, wenn Sie versuchen, zu bauen. – shmosel

Antwort

0

Die static void main() Methode sollte nicht von der Anwendung aufgerufen werden, aber die beste Sache zu wissen ist es zu überprüfen, indem Sie suchen, wenn der Klassenname irgendwo verwiesen wird (eine textuelle Suche nach dem Klassennamen auf allen Projekten der App ist besser, weil Reflexion kann verwendet werden). Wenn Sie keine Referenzen finden, ist das ein gutes Zeichen. Wenn Sie Referenzen haben, sollten Sie verstehen warum. Als nächstes sollten Sie überprüfen, ob die Klasse in unserem Krieg nicht enthalten ist. Es ist im Krieg, Sie sollten es ausschließen, indem Sie es in den Testordner Ihres Projekts (src/test/java in Maven/Gradle zum Beispiel) verschieben.

Ist ein Test mit schlechtem Design (kein Komponententest) oder ist ein nützlicher Testcode? Es hängt davon ab. Manchmal müssen Sie einige Tests ohne Komponententest durchführen, da Sie die Umgebung, die Sie testen möchten, nicht beherrschen (ein Remote-Webdienst, Daten, die Sie nicht beherrschen, weil extern usw.), also nicht möchte, dass der Build Ihrer Anwendung dadurch scheitert. Im Allgemeinen werden Komponententests automatisch im Build gespielt. Sie sollten also keinen Komponententest für diese Art von Test verwenden, sondern einen static void main(). Auf diese Weise können Sie Ihren manuellen Test spielen, wann Sie wollen und was auch immer das Ergebnis ist, Sie haben keinen Build-Fehler.

Wenn Sie bemerken, dass der Test für diese Art von Bedarf durchgeführt wurde, sollten Sie einen Java-Kommentar hinzufügen. Andernfalls, wenn der Test reproduzierbar ist und sich auf innere Dienste Ihrer Anwendung stützt und auch nicht darauf angewiesen ist, Datenbankdaten zu ändern, sollten Sie einen Kommentar FIXME hinzufügen, um anzuzeigen, dass dieser Test in einen Komponententest umgewandelt werden soll.