2011-07-08 7 views
6

私はなぜ知らないが、私はいつもこのように私JMockテストを書いた:TearDownでJMock assertIsSisisfied?

@Test 
public void testMyThing() throws Exception { 
    mockery.checking(new Expectations() {{ 
     oneOf(mockObj).foo(); 
    }}); 
    testObj.bar(); // calls mockObj.foo() 
    mockery.assertIsSatisfied(); 
} 

しかし、多くのテストがある場合、それはティアダウンにassertIsSatisfiedを移動するために良いですか?

@After 
public void tearDown() throws Exception { 
    mockery.assertIsSatisfied(); 
} 

答えて

5

これを実行するには、JMockランナーを使用することをお勧めします。クラスに注釈を付ける

@RunWith(JMock.class) 
public class TestClass { 

これは、テストライフサイクルの適切な場所でアサーションを呼び出します。失敗が正しく報告されない可能性があり、他のクリーンアップを台無しにする可能性があるため、ティアダウンは適切な場所ではありません。

新しい@Ruleインフラストラクチャで動作するリポジトリにもモックルールがあります。

0

はい、私はティアダウンでそれをする傾向があります。それは、実際にテストしているものに個々のテストメソッドの焦点を維持します。@Afterのボイラープレートを削除することによって、テストは可能な限り表現力豊かで可読性があります。

実際に、私は時々、それよりもさらにそれを取る、と私のためにMockeryを扱うJMockSupport基本クラスを使用します(同様にmock(...)の利便性の実装を提供します)。これはもちろんのことですが、JUnit 3のような要件は決してありません。

+0

ランナーまたは新しいルールの実装の使用を検討してください。 @Afterを使用すると、テストライフサイクルの適切なタイミングで例外がスローされません。 –

関連する問題