Java Mockito验证方法调用一次

Java Mockito验证方法调用一次,java,testing,mockito,Java,Testing,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

我试图使用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){}
}
但在运行时,我得到了以下异常:

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)

为什么??为什么我会犯这个错误?如何使此测试按预期工作?

您正在分配一个长度为4的字节缓冲区,而每个字节只存储3位,长度为1字节。将此字节数组传递给字符串的构造函数,将创建一个包含4个字符的字符串,其中最后一个字符为\u0000 byte=0


使用ByteBuffer.allocate3.

Hah,但为什么会生成另一个字符串?非常不清楚的消息。因为您正在使用长度为4的字节数组初始化字符串。最后一个字节保持为零。尝试调试字符串的创建,您将看到它有4个字符长。