2016-12-15 9 views
0

equalToToを追加すると、テストが失敗する理由を理解しようとしています。 私は簡単なクラスとテストで問題を再現しました。JUnit Mockitoテストが等価で失敗する

最初のテストに合格し、2番目のテストは失敗します。

サンプルクラス

public class Class { 

Map<String, Boolean> data = new HashMap<>(); 

public Map<String, Boolean> getData(boolean access) { 
    if (!access) 
     return null; 
    return data; 
}} 

テストクラス

public class ClassTest { 

@InjectMocks 
private Class testObj; 

@Test 
public void testGetDataNull() { 
    assertThat(testObj.getData(false), is(nullValue())); 
} 

@Test 
public void testGetDataNull2() { 
    assertThat(testObj.getData(false), is(equalTo(nullValue()))); 
}} 

失敗したテストでは、このエラーメッセージ

Expected: is <null> 
    but: was null 

Q見せている。これらの違いは何ですが?

洞察が大変ありがとうございます。

+0

2番目のテストでは、_getData(false)_の結果が_nullValue()_によって生成されたMatcherオブジェクトと等しいかどうかを実際に確認していると思います。代わりに* null *を使ってみてください。 –

+0

あなたのクラスには 'Class'という名前を付けないでください。これはあなたにあらゆる種類の問題を引き起こす可能性があります。 – nasukkin

答えて

0

nullValue()org.hamcrest.core.isNullオブジェクトを返すためです。したがって、nullと等しくない、それはオブジェクトです。しかし、そのオブジェクトにはnullと一致するmatchesメソッドが含まれているので、isが機能します。余談として

、テストはおそらくちょうどassertNull(testObj.getData(false))

0

あなたの質問は、Hamcrestについて実際にMockitoではありませんお読みください。 nullある実際の値、すなわちtestObj.getData(false)は、のIsNull()マッチャーのインスタンスであるnullValue()によって返される値に等しい場合

あなたがテストしています。 IsNullのインスタンスがnullに等しくないため、失敗します。

私はHamcrestを避けることをお勧めします。これは私の意見では、正確には使用するのが難しく、AssertJよりもエレガントではありません。 AssertJで

、あなたはもう推測する

assertThat(testObj.getData(false)).isNull(); 

ない静的メソッドを記述し、かつ有効なではなく、流暢なアサーションを自動補完しました。

関連する問題