2017-05-20 1 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

3 자릿수 (길이 1 바이트 각각) 만 저장되는 동안 길이가 4 인 바이트 버퍼를 할당합니다. 이 바이트 배열을 String 생성자에 전달하면 마지막 문자가 \ u0000 (byte = 0) 인 4 자의 String이 만들어집니다.

ByteBuffer.allocate(3)을 사용하십시오.

+0

아,하지만 다른 문자열이 생성되는 이유는 무엇입니까? 매우 불분명 한 메시지. –

+1

길이가 4 인 바이트 배열로 문자열을 초기화하기 때문에 마지막 바이트는 0으로 유지됩니다. String 생성을 디버깅 해보면 길이가 4 자임을 알 수 있습니다. –

관련 문제