有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

试图做一些JUnit测试,但是已经有一段时间了,所以我忘记了一些东西。如果我在测试一个类,我会在@before()中创建该类的一个对象,但在teardown中,我不应该将其设置为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) 个答案

  1. # 1 楼答案

    不需要。您不需要在tearDown方法中将字段设置为null

    JUnit在测试类的新实例中运行每个测试方法

    如果省略tearDown方法,测试将正常运行

    只有当您的测试具有对象之外的副作用时,才需要使用@After拆卸方法,例如创建文件或文件夹、插入数据库、更新静态字段等。在这些情况下,可以使用拆卸方法撤消测试的副作用

  2. # 2 楼答案

    我发现了错误。我没有在正确的位置实例化它。通过在@before之外声明它,我可以直接测试cntlr。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;
    }
    
  3. # 3 楼答案

    将其设置为ControllerTest上的字段。如前所述,一旦setup()完成,它就超出了范围

    不过,要回答更大的问题,你可能不必这么做。每次在setup()中创建一个新实例时,都会丢弃对旧实例的引用。旧的实例不应该影响将来的测试(尽管总是有办法给自己制造麻烦)