2016-04-01 20 views
0

试图做一些JUnit测试,但它已经有一段时间了,所以我忘记了一些东西。如果我正在测试一个类,我在@before()中创建了一个类的对象,但是在拆解过程中,我不应该将它设置为null?这样它会消除任何可能干扰我下一次测试的问题或任何问题?Junit测试中的拆解()重置字段

到目前为止,我已经完成了这项工作。

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


} 

但它说它不能解析为变量。

+2

控制器的范围在setup()中,那么它怎么能在tearDown()中找到?移动变量。 – KevinO

回答

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; 
} 
1

将它作为ControllerTest的字段。正如所写的,只要setup()完成,它就会超出范围。

但要回答更大的问题,您可能不需要那样做。每当您在setup()中创建一个新实例时,都会丢弃对旧实例的引用。旧实例不应该影响未来的测试(尽管总有办法为自己制造麻烦)。

3

号你做需要的字段设置为null的拆卸方法。

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

如果您只是省略tearDown方法,那么您的测试将正常运行。

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