2017-05-20 5 views
0

メソッドが呼び出されたかどうかを検証するためにmockitoを使用しようとしています。次に例を示します。一度呼び出されるMockito検証メソッド

@Test 
public void t(){ 
    InvokedFromTest ift = mock(InvokedFromTest.class); 
    TestClass t = new TestClass(); 
    t.ift = ift; 

    t.mm(new String(ByteBuffer.allocate(4).put("123".getBytes()).array())); 
    verify(ift, times(1)).m("123"); 
} 

private static class TestClass{ 
    public InvokedFromTest ift; 
    public void mm(String s){ ift.m(s); } 
} 

private static class InvokedFromTest{ 
    public void m(String s){} 
} 

しかしt()をrunnigとき、私は次の例外を得た:

Argument(s) are different! Wanted: 
invokedFromTest.m("123"); 
-> at com.pack.age.TableRowIgniteProcessingLogicTest.t(TableRowIgniteProcessingLogicTest.java:62) 
Actual invocation has different arguments: 
invokedFromTest.m("123"); 
-> at com.pack.age.TableRowIgniteProcessingLogicTest$TestClass.mm(TableRowIgniteProcessingLogicTest.java:67) 

なぜ?なぜこのエラーが発生しましたか?このテストを期待どおりにするにはどうすればいいですか?

答えて

1

長さ4のバイトバッファを割り当てますが、3桁(長さ1バイト)のそれぞれが格納されます。このバイト配列をStringのコンストラクタに渡すと、最後の文字が\ u0000(byte = 0)の4文字の文字列が作成されます。

ByteBuffer.allocate(3)を使用してください。

+0

ハ、なぜ別の文字列が生成されますか?非常に不明瞭なメッセージ。 –

+1

長さ4のバイト配列で文字列を初期化するため、最後のバイトはゼロのままです。 Stringの作成をデバッグしようとすると、4文字分の長さになります。 –

関連する問題