Junit中的Teardown()测试重置字段

时间:2016-04-01 17:04:03

标签: java testing junit

尝试做一些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;
}


}

但它表示无法将其解析为变量。

3 个答案:

答案 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;
}