2016-09-21 5 views
2

モックを検証するときMockito.times(1)が頻繁に使用されている:Mockitoはverify(Object)のための暗黙のtimes(1)を使用しているためIntelliJ IDEAで検証するために渡されたMockito回数(1)/回数(1)を報告するための堅牢な構造検索テンプレートを作成するにはどうすればよいですか?私のプロジェクトで

verify(mock, times(1)).call(); 

これは冗長である。したがって、次のコードは、上記のコードはまったく同じものを行います。

verify(mock).call(); 

だから私はそのような事件を報告するために構造的な検索ドライブ検査を書くつもりです(例えば、Mockito.times(1)のような名前は冗長です)。私はのIntelliJ IDEA構造検索では専門家ではないとして、私の最初の試みでした:それは呼び出しサイトを無視するため

Mockito.times(1) 

明らかに、これは良いさがすテンプレートではありません。さんが言ってみましょう、私は次のコードのためにそれが役立つと私はトリガする検査を好きではないだろう。

VerificationMode times = Mockito.times(1); 
         //^unwanted "Mockito.times(1) is redundant" 

だから今、私は私がトリガする検査をご希望のコンテキストを定義したいと思います。検査の検索テンプレートは次のようになります。

Mockito.verify($mock$, Mockito.times(1)) 

verify(mock, times(1)).call()のようなコードは、(org.mockito.Mockitoから静的にインポートされた場合は)timesと表示されます。しかし、一つのこともあります。 Mockito.times次の行は、検査によって無視されるように、実際には、そのような検証モードがグループ化され、そのVerificationModeFactoryクラスから来ている:

Mockito.verify($mock$, $times$(1)) 

:これを修正するための

verify(mockSupplier, VerificationModeFactory.times(1)).get(); 

私の別の試みは、のようなものでした:

  • $mock$はまだデフォルトのテンプレート変数です。
  • $times$
  • テキスト/正規表現と変数 timesに設定され、 全体の単語のみtrueに設定されているを読み取られ、 Expression type (regexp)(Times|VerificationMode)に設定されている - 少なくとも、これは私はそれを信じ方法ですうまくいくはずです。

動作させることはできません。なぜTimesも正規表現に含まれていますか?これは*.times(int)の実際の実装である、そう、理想的には、次の行があまりにも報告する必要があります。もちろん

verify(mockSupplier, new Times(1)).get(); 

を、私はすべての3つの検査テンプレートを作成することもできますが、それは単一の検索を使用してこのようなテンプレートを作成することが可能ですテンプレートと$times$変数を設定するときに何が欠けていますか?

(私はIntelliJ IDEA Community Edition 2016.1を使用しています。$Qualifier$テキスト/正規表現で
Mockito.verify($mock$, $Qualifier$.times(1))

VerificationModeFactory|Mockitoと出現は、静的にもインポートする場合)、それを見つけるために、(0,1カウント:1)

答えて

1

は、次の検索クエリをお試しください。 $times$テキスト/正規表現.*times\s*\(\s*1\s*\)
Mockito.verify($mock$, $times$)

Case sensitiveチェックボックスをオフにします。また、あなたが次のクエリを使用することができますnew Times(1)に一致するように

+0

提案していただきありがとうございます。私は質問したい:「新しいタイムズ(1)」コンストラクタも何らかの形で同じ検査に含めることは可能なのだろうか? –

+0

私は答えに 'new Times(1) 'を見つける方法を追加しました。 –

+0

ああ、構造検索は重いテキスト/正規表現指向のようです。私はそうではないと思った。あなたの最初の提案を使い、2つの変更に分割したいと思います:メソッドとコンストラクタは異なる名前を与えるだけです。ありがとうございました! –

関連する問題