2012-04-20 16 views
5

私は2つのテストクラス、MyFirstTestとMySecondTestを持っています。それぞれ独立して動作しても問題ありません。両方を実行すると(Eclipseでこれらのファイルを含むテストフォルダを選択し、右クリックしてjunitとして実行すると)、MyClassはまだテストが実行されているので、MySecondTestは失敗します。 MyFirstTestでは、MyClassを嘲笑する必要があります。 MySecondTestは、MyClassを嘲笑されないように要求します。私はtearDownMocksがクラスをdemockすると思っていたと思った。MyClassは2つのテストの間で嘲笑されたままです

public class MyFirstTest { 
    @Before 
    public void setUp() throws Exception { 
     Mockit.setUpMocks(MockMyClass.class); 
    } 
    @After 
    public void tearDown() throws Exception { 
     Mockit.tearDownMocks(MockMyClass.class); 
    } 
    @AfterClass 
    public static void tearDownAfterClass() throws Exception { 
     Mockit.tearDownMocks(MockMyClass.class); 
    } 
    @MockClass(realClass = MyClass.class, stubs = "<clinit>") 
    public static class MockMyClass { 
... 


public class MySecondTest { 
+1

'私はMockit.tearDownMocks()を追加しました。 MySecondTestクラスのsetUpメソッド(前に注釈が付けられているメソッド)には、前のクラスのモックを使用しないようにモックをリセットします。 AfterとAfterClassでアノテートされたメソッドの内部からのMockit.tearDownMocks(MockMyClass.class)呼び出しがなぜ落ちているのか分かりません... ' – user1346730

答えて

3

Mockit.tearDownMocks()は、実際のクラスを受け付け、モックは受け入れません。正しいコードは次のようになります:

Mockit.tearDownMocks(MyClass.class); 
+2

この機能は推奨されていません。モッククラスで '.tearDown'を呼び出さなければなりません。また、JUnitでは、これはテスト間で自動的に行われるべきです – keaplogik

1

正しい方法は次のとおりです。クラスをモックし、変数に割り当てます。そして、その変数を使用して、他のテストケースに影響を与えないようにモックを破棄またはクリアすることができます。

MockUp<PmRequestData> mockpmreq = new MockUp<PmRequestData>() { 
     @Mock 
     public Map<String, KPIData> getKpiDataMap() { 
      return datamap; 
      } 
     }; 
mockpmreq.tearDown(); 
関連する問題