2014-03-24 3 views
1

오류가 발생하는 경우 org.mockito.exceptions.misusing.InvalidUseOfMatchersException : 잘못된 인수 매처 사용! 1 명의 matchers가 예상되며 2 개가 기록됩니다. 이 예외는 matcher가 원시 값과 결합 된 경우 발생할 수 있습니다. // wrong : someMethod (anyObject(), "raw String"); matcher를 사용할 때 모든 인수는 matchers에서 제공해야합니다. 예 : // 올바른 : someMethod (anyObject(), eq ("String by matcher"));org.mockito.exceptions.misusing.InvalidUseOfMatchersException : mockito

when(
       getProgramService 
         .callService(any(GetProgramType.class))) 
       .thenReturn(jAXBresponse); 

에서

당신이 게시 한 코드가 잘 보이는 오류 및 가능한 해결

답변

1

을 설명해주십시오; 나는 그것에 문제가 보이지 않는다. 즉시 코드가 또는 보다 위에있는 것일 가능성이 높습니다. 예외 코드는입니다. 키는 다음과 같습니다.

잘못된 인수 매처 사용! 1 명의 matchers가 예상되었고, 2 명이 기록되었습니다.

any 위에서 사용했듯이 "특별한 종류의 null"또는 "특별한 종류의 GetProgramType"을 반환하지 않습니다. 그것들은 존재하지 않는다. Instead, it returns null and as a side effect puts a matcher on a stack. matcher를 확인할 때 Mockito는 스택을보고 비어 있거나 (모든 인수가 같은지 확인하십시오) 또는 확인중인 호출의 인수의 수와 정확히 같은지 확인합니다 (즉, 각각에 대해 일치 자 논의).

여기서 일어나는 일은 번 방법을 사용하는 사람이 callService 예상보다 많다는 것입니다.

String expectedString = Matchers.anyString(); // DOESN'T WORK 

// Instead, this just adds a matcher to the stack, almost certainly where it 
// doesn't belong. 

을 ... 또는 마지막 방법 조롱 :

// Assume getProgramService.otherMethod is final. 
when(getProgramService.otherMethod(anyString())).thenReturn(123L); 

// This actually calls getProgramService.otherMethod(null) and leaves an 
// anyString matcher on the stack without setting any expectation that 
// would returns 123L. 

일시적으로,이 문제가 확인 추가하려면를 개발자가 실수로 지역 변수의 정규 표현을 저장하려고하면 나는이 자주 참조

Mockito.validateMockitoUsage(); 

이 인위적으로 정합 기의 스택을 확인하고 가능성이 그 라인에 예외가 발생합니다 : 하나의 직전이 문장은 당신이 기록했다. 그렇다면 코드 위의 위의 코드를 확인하십시오. 어쨌든 질문에 주변 코드를 추가하면 디버깅에 도움이 될 것입니다.