2016-10-24 17 views
6

私がテストしているクラスが正しい依存クラスのメソッドを呼び出すことを確認しようとしています。だから私はメソッドのパラメータを一致させようとしていますが、私はテストを脆弱にしたくないので、このテストでは実際の値を気にしません。Mockitoで可能なnullパラメータを一致させる方法

Mockitoは、私が期待してい動作がバグであることを決定しましたので、しかし、私はトラブルにそれを設定するに実行しているよ:https://github.com/mockito/mockito/issues/134

だから、そのパラメータのマッチャーを定義するための正しい方法をwhat't nullでもかまいませんか?

問題#134が「固定」の場合、マッチャは最初のケースでのみ一致するため、このコードは失敗します。どのようにして4つのケースすべてで作業する正規表現を定義できますか?

MyClass c = mock(MyClass.class); 

c.foo("hello", "world"); 
c.foo("hello", null); 
c.foo(null, "world"); 
c.foo(null, null); 

verify(c, times(4)).foo(anyString(), anyString()); 

答えて

1

私はAPIがanyString()は、少なくともアップまでany(String.class)ためだけの別名であることを示唆しているように見えるので、これは、私は、このビット誤解を見つけるany(String.class)

に切り替えて動作するようになりました2.0アップデート。公平を期すために、ドキュメントではanyString()がnull以外の文字列にのみ一致することを示しています。それはちょうど私に反し直しているようです。

+0

これはMockito 2.0以降の正解と思われます。 2.0より前のMockitoのバージョンでは、 'anyString()'を使ったあなたの元のコードがうまくいきましたが、これはMockitoチームが2.0で導入した大きな変化です。 –

+1

これはもう動作しません。ドキュメントから - '' 'Mockito 2.1.0以降、このメソッドは型チェックを実行するので、null値が許可されていない' ' –

-1

方法について:

verify(c, times(4)).foo(anyObject(), anyObject()); 

はあなたのためにその仕事をしていますか?

Matchers.anyObject()はnullです。

リファレンスMockito docsに:

+0

オブジェクト) ' – gridDragon

+0

おそらく' any() 'を取り込む型を使うことができますが、' anyObject'は 'Object'を返すので動作できません。 –

11

any()

のjavadocをからMockito 2.1.0は、唯一String null以外のことができますので。この はnull可能な参照であるため、への推奨APIは、 nullラッパーと一致します。isNull()です。私たちはこれが の変更により、テストがより安全になり、それがMockito 1.xであったことを感じました。

ので、NULL可能な文字列引数を一致させる方法は、明示的な宣言である。その後、私のIDEは、 `FOO(文字列、文字列)` `FOO(オブジェクトで呼び出すことができないと文句を言いますので、ノー

nullable(String.class) 
+0

ありがとう!伝説。 – prijupaul

関連する問題