9 Stimmen

JUnit TestCase Objekt-Instanziierung

Ist eine neue (oder andere) Instanz von TestCase Objekt verwendet wird, um jede Testmethode in einem JUnit-Testfall auszuführen? Oder wird eine Instanz für alle Tests wiederverwendet?

public class MyTest extends TestCase {
  public void testSomething() { ... }
  public void testSomethingElse() { ... }
}

Wie viele Instanzen von MyTest Klasse erstellt wird?

Wenn möglich, geben Sie einen Link zu einem Dokument oder Quellcode an, in dem ich das Verhalten überprüfen kann.

8voto

anjanb Punkte 12084

Ja, es wird eine eigene Instanz erstellt.

Während der Ausführung dieses Tests werden 2 Instanzen von MyTest erstellt.

Wenn Sie ein anderes Verhalten wünschen, besteht eine Möglichkeit darin, ein ähnliches Werkzeug namens TestNG( http://testng.org/doc/ ).

4voto

Dov Wasserman Punkte 2604

Ich konnte in den JUnit-Dokumenten keine klare Antwort auf Ihre Frage finden, aber die Absicht ist, wie anjanb schrieb, dass jeder Test unabhängig von den anderen ist, so dass für jeden auszuführenden Test eine neue TestCase-Instanz erstellt werden könnte.

Wenn Sie einen teuren Testaufbau haben (" Vorrichtungen "), die für alle Testfälle in einer Testklasse gemeinsam genutzt werden sollen, können Sie mit der @BeforeClass Anmerkung zu einer statischen Methode, um dieses Ergebnis zu erreichen: http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html . Beachten Sie jedoch, dass für jeden Test eine neue Instanz erstellt werden kann, was sich jedoch nicht auf die statischen Daten auswirkt, die Ihre @BeforeTest-Methode initialisiert hat.

3voto

Olaf Kock Punkte 44749

Es gibt eine Instanz für jeden Testlauf. Versuchen Sie

public class MyTest extends TestCase {
  public MyTest() { System.out.println("MyTest Constructor");
  public void setUp() { System.out.println("MyTest setUp");
  public void tearDown() { System.out.println("MyTest tearDown");
  public void testSomething() { System.out.println("MyTest testSomething");
  public void testSomethingElse() { System.out.println("MyTest testSomethingElse");
}

Der Sourcecode (auch der zu neueren Versionen - Ihr und mein Beispiel ist Junit 3) ist auf http://www.junit.org

2voto

Chris Noe Punkte 35043

Wenn Sie diese Frage stellen, weil Sie sich Sorgen darüber machen, dass Daten in Ihrem Konstruktor initialisiert und neu initialisiert werden, sollten Sie sich darüber im Klaren sein, dass der vorgeschriebene Weg zur Initialisierung Ihrer Testfalldaten ausschließlich über setUp() und tearDown() erfolgt.

0voto

orbfish Punkte 6769

Ja, auf jeden Fall. Ich habe festgestellt, dass auf Daten, die ich in Instanzvariablen gespeichert habe, aufgrund dieses Designs zwischen den Tests nicht zugegriffen werden konnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X