2016-04-01 8 views
0

いくつかのJUnitテストをしようとしましたが、しばらくの間、いくつかのことを忘れてしまいました。私がクラスをテストしている場合、私は@before()でクラスのオブジェクトを作成しますが、そのときにはティアダウンでnullにするはずがありませんか?そうすれば、次のテストに支障をきたすような問題や何かが消去されますか?フィールドをリセットするJunitテストでのTeardown()

これまでのところ私はこれをしました。

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();することができます。それが新しいものになる前に。それから、それを@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

いいえあなたははtearDownメソッドにnullにフィールドを設定する必要はありませありません。

JUnitは、テストクラスの新しいインスタンスで各テストメソッドを実行します。

tearDownメソッドを省略すると、テストは正常に実行されます。

@After tearDownメソッドは、ファイルやフォルダの作成、データベースへの挿入、静的フィールドの更新など、オブジェクト以外の副作用がある場合にのみ必要です。これらの場合、tearDownメソッドはテストの副作用を取り消すために使用されます。

関連する問題