2016-04-01 7 views
0

Ich versuche, einige JUnit-Tests zu machen, aber es ist eine Weile her, also vergesse ich ein paar Sachen. Wenn ich eine Klasse teste, mache ich ein Objekt der Klasse in der @before(), aber in der Teardown soll ich es nicht null machen? auf diese Art löscht es irgendwelche Probleme oder irgendetwas, das meinen nächsten Test stören könnte?Teardown() in Junit testen, um Felder zurückzusetzen

bisher habe ich das getan.

package potluck.Testing; 

import static org.junit.Assert.*; 

import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 

import potluck.domain.Controller; 
/** 
* @author Samuel 
* 
*/ 
    public class ControllerTest { 

    /** 
    * @throws java.lang.Exception 
    */ 
@Before 
public void setUp() throws Exception { 

    Controller testCntlr = Controller.getInstance(); 
} 

/** 
* @throws java.lang.Exception 
*/ 
@After 
public void tearDown() throws Exception { 
testCntlr() = null; 
} 


} 

aber es sagt, es kann nicht zu einer Variablen aufgelöst werden.

+2

Der Umfang des Controllers ist in Setup(), wie kann es in tearDown() gefunden werden? Verschieben Sie die Variable. – KevinO

Antwort

0

Ich habe den Fehler gefunden. Ich habe es nicht an der richtigen Stelle instantiiert. Indem ich es außerhalb des @before deklariere, kann ich einfachCntlr.getInstance(); im @before was es neu macht. Dann sieht es es im @after.

Controller testCntlr; 
/** 
* @throws java.lang.Exception 
*/ 
@Before 
public void setUp() throws Exception { 
    testCntlr = Controller.getInstance() ; 
} 

/** 
* @throws java.lang.Exception 
*/ 
@After 
public void tearDown() throws Exception { 
    testCntlr = null; 
} 
1

Machen Sie es zu einem Feld auf ControllerTest. Wie geschrieben, geht es außerhalb des Umfangs, sobald setup() endet.

Um die größere Frage zu beantworten, müssen Sie das wahrscheinlich nicht tun. Jedes Mal, wenn Sie in setup() eine neue Instanz erstellen, werden Sie den Verweis auf den alten wegwerfen. Die alte Instanz sollte zukünftige Tests nicht beeinflussen (obwohl es immer Möglichkeiten gibt, sich selbst Probleme zu machen).

3

Nein, Sie tun nicht müssen Felder in der tearDown Methode auf null setzen.

JUnit führt jede Testmethode in einer neuen Instanz der Testklasse aus.

Ihr Test wird ausgeführt, wenn Sie die Methode tearDown einfach weglassen. Eine @After Die Methode "tearDown" wird nur benötigt, wenn Ihre Tests über das Objekt hinausgehende Nebenwirkungen haben, wie das Erstellen einer Datei oder eines Ordners, das Einfügen in eine Datenbank, das Aktualisieren eines statischen Feldes usw. In diesen Fällen kann die tearDown-Methode verwendet werden verwendet, um die Nebenwirkung des Tests rückgängig zu machen.

Verwandte Themen