Mockito 및 Scala의 기본 매개 변수를 사용하여 일부 동작을 이해하고 싶습니다. 암시 적 기본값을 사용하여 메서드 호출 확인
trait SomeImplicit
object SomeService {
val AnyImplicit = new SomeImplicit {}
}
trait SomeService {
def doWork(param: String)(implicit di: SomeImplicit = SomeService.AnyImplicit)
}
이의이
doWork
메소드를 호출하자 : 그것은 일하는 것이 비록 자발적으로
class SomeService$Test extends WordSpec with MockitoSugar {
"SomeService" should {
"doWork" in {
val dodo = mock[SomeService]
val expectedParameter = "ok"
dodo.doWork(expectedParameter)
verify(dodo, times(1)).doWork(expectedParameter)(SomeService.AnyImplicit)
verifyNoMoreInteractions(dodo)
}
}
}
가, 내가 가진 것
여기에 최소한의 예입니다. 그러나 그렇지 않습니다. 내가 얻을 :
Argument(s) are different! Wanted:
someService.doWork(
"ok",
[email protected]
);
-> at SomeService$Test$$anonfun$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SomeService$Test.scala:25)
Actual invocation has different arguments:
someService.doWork(
"ok",
null
);
-> at SomeService$Test$$anonfun$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SomeService$Test.scala:23)
Argument(s) are different! Wanted:
someService.doWork(
"ok",
[email protected]
);
-> at SomeService$Test$$anonfun$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SomeService$Test.scala:25)
Actual invocation has different arguments:
someService.doWork(
"ok",
null
);
-> at SomeService$Test$$anonfun$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SomeService$Test.scala:23)
'DummyImplicit.dummyImplicit'의 구현을 보면'implicit def dummyImplicit : DummyImplicit = new DummyImplicit'를 볼 수 있습니다. 따라서, 호출 될 때마다 새로운 객체를 얻습니다. 'dodo.doWork (expectedParameter)', 즉'dodo.doWork (expectedParameter) (SomeService.Dummy)'를 호출 할 때 정확히 동일한 객체 ('SomeService.Dummy')를 전달해야 할 것입니다. –
암시 적 매개 변수를 전달하지 않으면 스칼라가 (scala.Predef.DummyImplicit # dummyImplicit'의) 자구를 삽입합니다. –
좋습니다. 잘못된 예제를 사용했습니다. 나는 그것을 미리 정의되지 않은 무언가로 업데이트했다. –