2013-10-10 22 views
5

Ich habe gerade die Dokumentation für Junit-Tests durchgesehen, kann aber die Notwendigkeit, Tests als öffentlich zu definieren, nicht verstehen. Könnte irgendjemand etwas dazu sagen?Warum sollten Testmethoden in Junit als öffentlich definiert werden?

Ich las auf https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Test.java

Aber bin immer noch mit dem Grund nicht klar.

Mit I ist gemeint, warum kann ich nicht etwas wie

@Test 
private void testAdd(){ } 

Antwort

5

Der JUnit-Framework ruft Ihre Testmethoden von außerhalb Ihrer Testklasse schreiben. Wenn Ihre Testmethoden privat sind, wird dies nicht möglich sein.

+1

Eine Frage, die sich stellt, ist: Wie verstecken wir eine Testmethode, auf die wir nicht von außerhalb unserer Testklasse zugreifen sollen? – Jagori

+1

@ Jagori Was ist der Anwendungsfall für eine private Testmethode? Der Zweck einer Testmethode besteht darin, dass sie vom JUnit-Framework ausgeführt wird, so dass es keinen Zweck hat, einen privaten zu haben. Sie können private Nicht-Testmethoden in Ihre Testklasse schreiben, die dann von einer Testmethode aufgerufen werden, wenn Sie Code benötigen, auf den nicht direkt von außerhalb der Klasse zugegriffen werden kann. –

+2

Normalerweise sind Tests in veröffentlichten Artefakten nicht enthalten und können daher nicht verwendet werden. –

0

versuchen

@Test 
public void testAdd(){ } 

Ihre testAdd Methode privat ist, wird es nicht in der Lage sein, das zu tun.

+0

Ja, das war, was ich verstehen wollte, warum nur privat und nicht öffentlich.Ich denke, ich habe die Antwort bekommen, da JUnit-Framework die Testmethoden von außerhalb der Testklasse aufruft, daher muss es als öffentlich definiert werden. Wie verstecken wir eine Methode, auf die wir nicht außerhalb der Testklasse zugreifen wollen? – Jagori

+0

Hast du schon mal herausgefunden, wie man Testklassen versteckt? –

1

JUnit greift auf Ihre Testmethoden durch Reflexion zu. Ein SecurityManager kann den Zugriff auf private Methoden steuern. Daher verwendet JUnit nur öffentliche Methoden und Felder für alles, auf das das Framework zugreift.

Kurz gesagt: JUnit konnte keine privaten Testmethoden ausführen, wenn ein SecurityManager aktiv ist, der den Zugriff auf private Methoden nicht erlaubt.

+0

Verzeihen Sie mir Stefan, aber bin nicht klar mit diesem Kommentar von Ihnen. Könnten Sie näher erläutern, was Sie unter Junit Zugang zu Testmethoden durch Reflexion verstehen. – Jagori

+0

JUnit verwendet Reflektion, um alle Methoden zu finden, die mit @Test gekennzeichnet sind. (Siehe computeTestMethods() in https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/runners/BlockJUnit4ClassRunner.java) –

Verwandte Themen