我正在尝试使用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){}
}
但是当runnig
t()
时,出现以下异常: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字节)。将此字节数组传递给String的构造函数,创建一个4个字符的字符串,其中最后一个字符为\ u0000(byte = 0)。
使用ByteBuffer.allocate(3)
。