2012-03-04 23 views
5

私はverifyメソッドをMockitoで動作させようとしています。私は次のテストを持っています:Mockito検証に失敗しない

@Test 
public void testShouldFail() 
{ 
    String string = mock(String.class); 
    string.length(); 
    verify(string, times(100)).length(); 
} 

このテストは失敗しますが、合格です。なぜ誰が知っていますか?私はMockitoを間違って使用していますか?ここで

更新

が失敗しない別の例です:

private interface Bar 
{ 
    public void foo(); 
} 

@Test 
public void testShouldFail() 
{ 
    Bar bar = mock(Bar.class); 
    bar.foo(); 
    verify(bar, times(100)).foo(); 
} 
+0

あなたがテストするときに2番目の例の線量が不足しています。詳細を教えてください。 –

答えて

5

さて、あなたはそれについて注意しなければならない:デフォルト、であなたは、最終的なクラス(のようなString)を模擬することはできません。フレームワークのThis is a known limitation

あなたの例では、適切なエラーメッセージが表示されて私のために失敗します。だから私は、プロジェクト内のいくつかのマイナーな設定上の問題があるかもしれないと思い

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.lang.String 
Mockito cannot mock/spy following: 
    - final classes 
    - anonymous classes 
    - primitive types 
    at Test.testShouldFail(Test.java:6) 
     ... 

。どのIDEを使用していますか?あなたはMockitoのどのバージョンを持っていますか?どのようにあなたのテストを実行するのですか?

PowerMockのような追加のツールキットを試してみると、overcome this limitationに役立つ場合があります。このフレームワークはMockitoと非常に簡単に組み合わせて使用​​できます。

一方、Stringjava.langパッケージに含まれていますが、これらのクラスにはVMによるセキュリティの検証がいくつか追加されていると思います。私はそのようなクラスのモック(つまり、バイトコードを操作することができる)と確信していません(たとえば、java.*パッケージに何かを入れようとするとコンパイルエラーが発生します)。しかし、これは私の側からの前提です。

+0

正直なところ、私はすぐに例として 'String'を使用しました。それでも、Mockitoにはその限界があることを知っておくとよいでしょう。私は失敗しない別の例で私の質問を更新しました。私はJunit 4.8.2、Mockito 1.9.0、PowerMock 1.4.11でEclipse Indigoを使用しています。 – LandonSchropp

+0

インポートディレクティブも含めて、あなたが作った完全なテストクラスを含めてください。プロジェクトに必要なJARファイルを追加してもよろしいですか? – rlegendi

+0

遅く返事を申し訳ありません。あなたが正しいと思われます。私はPowerMockを追加したときに私のMockitoライブラリを台無しにしました。私はそれをチェックできるようにあなたの答えを更新してください。助けてくれてありがとう。 – LandonSchropp

関連する問題