2012-03-04 3 views
5

모크토에서 verify 메소드를 작동 시키려고합니다. 다음 테스트를 수행했습니다.모토토 검증 실패하지 않음

@Test 
public void testShouldFail() 
{ 
    String string = mock(String.class); 
    string.length(); 
    verify(string, times(100)).length(); 
} 

이 테스트는 실패하지만 통과합니다. 왜 아무도 알지 못해? 나는 Mockito를 잘못 사용하고 있습니까?

private interface Bar 
{ 
    public void foo(); 
} 

@Test 
public void testShouldFail() 
{ 
    Bar bar = mock(Bar.class); 
    bar.foo(); 
    verify(bar, times(100)).foo(); 
} 
+0

테스트 할 때 두 번째 예제가 실패합니다. 자세한 내용을 제공 할 수 있습니까? –

답변

5

글쎄, 당신이주의해야 : 여기에 업데이트

실패하지 않는 또 다른 예이다 기본적으로 당신이 마지막 수업을 (String을 같은) 조롱 수 없습니다 . This is a known limitation 프레임 워크입니다.

귀하의 예는 적절한 오류 메시지와 함께 나를 위해 실패

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.lang.String 
Mockito cannot mock/spy following: 
    - final classes 
    - anonymous classes 
    - primitive types 
    at Test.testShouldFail(Test.java:6) 
     ... 

그래서 내가 프로젝트의 몇 가지 사소한 구성 문제가있을 수 있습니다 같아요. 어떤 IDE를 사용하고 있습니까? Mockito의 어떤 버전이 있습니까? 시험을 어떻게합니까?

PowerMock과 같은 추가 툴킷을 사용해보십시오. overcome this limitation. 이 프레임 워크는 Mockito와 결합하여 매우 쉽게 사용할 수 있습니다.

반면에 Stringjava.lang 패키지의 일부이며 VM에 의해 이러한 클래스에 관련된 몇 가지 추가 보안 검증이 있다고 가정합니다 (확실하지는 않습니다). 나는 그러한 클래스의 모의 (즉, 바이트 코드 조작)을 할 수 있다고 확신하지 못한다. (예를 들어 java.* 패키지에 뭔가를 넣으려고하면 컴파일 오류가 발생한다.) 그러나 이것은 내 편에서의 가정 일뿐입니다.

+0

솔직히, 나는 단지'String'을 빠른 예제로 사용했습니다. 아직도, Mockito에는 그 한계가 있음을 아는 것이 좋습니다. 내 질문을 실패하지 않는 또 다른 예제로 업데이트했습니다. 저는 Junit 4.8.2, Mockito 1.9.0 및 PowerMock 1.4.11에서 Eclipse Indigo를 사용하고 있습니다. – LandonSchropp

+0

가져 오기 지시문을 포함하여 작성한 전체 테스트 클래스를 포함시킬 수 있습니까? 프로젝트에 필요한 JAR 파일을 추가 했습니까? – rlegendi

+0

늦게 답장을 드려 죄송합니다. 네가 옳은 것 같아. PowerMock을 추가 할 때 Mockito 라이브러리를 엉망으로 만들었습니다. 확인을 위해 답변을 업데이트하십시오. 도와 주셔서 감사합니다. – LandonSchropp