尝试做一些JUnit测试,但它已经有一段时间了,所以我忘了一些东西。如果我正在测试一个类,我在@before()中创建了一个类的对象但是在拆解时我不应该使它为null吗?它会消除任何可能干扰我下一次测试的问题或任何事情吗?
到目前为止,我已经做到了。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;
}
}
但它表示无法将其解析为变量。
答案 0 :(得分:3)
没有。 不需要在tearDown方法中将字段设置为null。
JUnit在测试类的新实例中运行每个测试方法。
如果您省略tearDown方法,您的测试将正常运行。
只有当您的测试具有超出对象的副作用时才需要@After
tearDown方法,例如创建文件或文件夹,插入数据库,更新静态字段等。在这些情况下,tearDown方法可用于撤消测试的副作用。
答案 1 :(得分:1)
将其设为ControllerTest
上的字段。如上所述,setup()
完成后,它就会超出范围。
要回答更大的问题,你可能不必这样做。每次在setup()
中创建新实例时,您都会丢弃对旧实例的引用。旧的实例不应该影响未来的测试(虽然总有办法给自己制造麻烦)。
答案 2 :(得分:0)
我发现了错误。我没有在正确的地方实例化它。通过在@before之外声明它,我可以只是testCntlr.getInstance();在@before中,它使它成为新的。然后它会在@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;
}