2013-05-21 22 views
16

Mockito's examples pageの最も基本的な例を使用して、私はJUnitで正常に動作します。単純なMockito検証はJUnitで動作しますが、Spockは動作しません

しかし、Spockで同じテストを実行すると失敗します。

のJUnit/Javaバージョン(これは渡し):

import org.junit.Test; 

import java.util.List; 

import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 

public class SimpleJunitTest 
{ 
    @Test 
    public void basicMockTest() 
    { 
     List mockedList = mock(List.class); 

     //using mock object 
     mockedList.add("one"); 
     mockedList.clear(); 

     //verification 
     verify(mockedList).add("one"); 
     verify(mockedList).clear(); 
    } 
} 

スポック/ Groovyのバージョン(これが失敗):

import static org.mockito.Mockito.mock 
import static org.mockito.Mockito.verify 


class SimpleSpockTest extends spock.lang.Specification 
{ 
    def "Basic Mock Test"() 
    { 
     given: 
      //mock creation 
      List mockedList = mock(List.class); 

     when: 
      //using mock object 
      mockedList.add("one"); 
      mockedList.clear(); 

     then: 
      //verification 
      verify(mockedList).add("one"); 
      verify(mockedList).clear(); 
    } 

} 

ここでは、私はスポックテスト取得エラーです失敗:

Condition not satisfied: 

verify(mockedList).add("one") 
|  |   | 
|  |   false 
|  [email protected] (renderer threw  
NullPointerException) 
[email protected] (renderer threw 
NullPointerException) 

at SimpleSpockTest.Basic Mock Test(SimpleSpockTest.groovy:25) 

アイデアや提案はありますか?私はSpockとMockitoが本当に好きで、一緒に働くことを望んでいます。どうもありがとうございました!

答えて

17

おおまかに言えば、thenブロックはブール式の形でアサーションを含むだけです。 Mockito検証式は、合格しなかった偽値(nullfalse0)を返します。これはSpockによって失敗したアサーションと解釈されます。

この問題を解決するには、検証式をラップするヘルパーメソッドを作成し、常にtrueを返します。または、Mockitoの代わりにSpockの組み込みのモッキングフレームワークを使用できます。

+0

それを避けようとしていましたが、スポークの模擬確認のエラーメッセージはかなり恐ろしいです。 –

+0

ありがとうございます。大きなエラーメッセージは確かにMockitoの商標です。幸いにも、私はSpockのエラーメッセージを改善する方法についてSzczepan(Mockitoの作成者)から定期的にフィードバックを得ています。ほとんどの場合、私は彼の言うことを聞いています。 :-) –

+8

私はいくつかのSpringコンポーネントをモックする必要があり、それでもSpockモックではできないので、しばらくしてから戻ってきます.Mockito.verify(mock)が見つかりました。 foo(bar)||本当のところは私のためにうまく動作し、合理的に読める。 – chrylis

関連する問題