2013-02-22 5 views
4

ScockTest에 Mockito의 Answer에 대한 대안이 있습니까? documentation을 통과했지만 아무 것도 찾지 못했습니다.Mockito의 답변 ScalaTest

예를 들어 스텁 방식의 인수에 대해 일부 논리를 실행하고 싶습니다. ScalaTest에서

when(mock.create(any(A.class))).thenAnswer(new Answer() { 
    Object answer(InvocationOnMock invocation) { 
     A firstArg = (A) invocation.getArguments()[0]; 
     firstArg.callMethod(); 
     return null; 
    } 
}); 

, 나는뿐만 아니라, Mockito를 사용으로 괜찮아 : Mockito, 나는 같은 것을 할 것입니다. 그러나, Answer을 정의하는 스칼라 친화적 인 구문이 더 있으면 좋을 것입니다.

감사합니다.

+0

정확히 무엇이 부족한 지 알려 주시면 도움이됩니다. –

+0

더 구체적으로 내 질문을 업데이트했습니다 ... – semberal

답변

1

ScalaMock을 사용해 보셨습니까? 또한 integrated with ScalaTest이며 더 많은 스칼라 친화적 인 API를 제공합니다.

+0

mockito에서 ScalaMock으로 마이그레이션하는 과정에서 ScalaMock의 InvocationOnMock과 같은 작업을 실제로 수행 할 수 있는지 궁금합니다. 그것은 매우 쉽고 마치 mockito에서하고 싶었던 것처럼 보입니다 : ScalaMock의'returns'에서 wrappen 인 불순한/돌연변이 함수를 가지고 있습니다 : ... when (...). returns (updateCount()))' – bbarker

2

당신이 특성 MockitoSugar에 혼합하는 경우, 당신은 모의를 생성하고이 구문을 사용하여 그것을 대답을 전달할 수 있습니다

mock[Collaborator](new Answer(){ ... }) 
2

이 도우미 함수 정의 :

def answer[T](f: InvocationOnMock => T): Answer[T] = { 
    new Answer[T] { 
    override def answer(invocation: InvocationOnMock): T = f(invocation) 
    } 
} 

을 그리고처럼 사용 예, 예. 방법에 전달 된 인수를 포함하는 Future[MyClass] 반환을 위해 :

when(myRepository.create(any[MyClass]())).thenAnswer(answer({ invocation => 
    Future.successful(invocation.getArguments.head.asInstanceOf[MyClass]) 
})) 
5

난 그냥 this blog post를 발견했다. 암시 적 변환을 사용하여 원하는 것을 성취하는 방법을 설명합니다. 이

implicit def toAnswerWithArgs[T](f: InvocationOnMock => T) = new Answer[T] { 
    override def answer(i: InvocationOnMock): T = f(i) 
} 

같은 암시 적 변환을 정의하는 경우는 인수와 같은 간단한 기능을 thenAnswer를 호출 할 수 있습니다 : 당신의 조롱 방법은 어떤이있는 경우도 경우에 대한 약간 짧은 대체 버전이 없습니다

when(mock.someMethodCall()).thenAnswer((i) => calculateReturnValue()) 

인수. 자세한 내용은 링크를 클릭하십시오.