[SCALA] 어떻게 스칼라에서 기능을 인수하는 방법을 조롱하는?
SCALA어떻게 스칼라에서 기능을 인수하는 방법을 조롱하는?
나는 전화 별 이름 인수를 취하는 메소드 호출을 조롱하기 위해 노력하고있어 :
import org.scalatest.WordSpec
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito._
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
trait Collaborator {
def doSomething(t: => Thing)
}
trait Thing
@RunWith(classOf[JUnitRunner])
class Test extends WordSpec with MockitoSugar {
"The subject under test" should {
"call the collaborator" in {
// setup
val m = mock[Collaborator]
val t = mock[Thing]
// test code: this would actually be invoked by the SUT
m.doSomething(t)
// verify the call
verify(m).doSomething(t)
}
}
}
나는 주로 내가 사용하고있는 무슨이의 이후 Mockito에 관심이 있어요,하지만 난 주요 모의 프레임 워크의 테스트 이런 종류의 할 수 있는지 여부를 확인 싶네. 테스트 오류 등으로 검증 라인 런타임 실패
내가 정확하게 상황을 이해 해요 경우, 컴파일러는 암시 적으로 반환 t 그 인수 없음 기능에 t을 포장한다. 모의 워크 후 동등한 테스트 코드에서 제조 한, 해당 기능을 비교하지만 동일된다 ().
내 경우는 문제의 비교적 간단한 버전입니다,하지만 난이 어떤 고차 기능에 문제가 될 것이라고 생각합니다.
해결법
-
==============================
1.이 추한 모습, 그러나 희망은 좋은 해결책을 찾기 위해 당신을 도울 수 있습니다 :
이 추한 모습, 그러나 희망은 좋은 해결책을 찾기 위해 당신을 도울 수 있습니다 :
import org.scalatest.mock.MockitoSugar import org.mockito.Mockito._ trait Collaborator { def doSomething(t: => Thing) } trait Thing new MockitoSugar { // setup val m = mock[Collaborator] val t = mock[Thing] m.doSomething(t) classOf[Collaborator].getMethod("doSomething", classOf[Function0[_]]).invoke( verify(m), new Function0[Thing] { def apply() = null override def equals(o: Any): Boolean = t == o.asInstanceOf[Function0[Thing]].apply() }) }
-
==============================
2.이 문제는 사용자가 명시 적 FunctionX 개체에 일치시킬 수 있습니다 정기적 높은 순서 기능에 의해 이름 호출에 고유 한 것 같다 :
이 문제는 사용자가 명시 적 FunctionX 개체에 일치시킬 수 있습니다 정기적 높은 순서 기능에 의해 이름 호출에 고유 한 것 같다 :
확인 (협력자) .somethingElse (임의 (기능 2 [문자열 것]))
바이 이름 경우에 Function0에 인수의 포장 암시 적으로 수행되며, 알렉세이의 대답 쇼에서는 명시 적 매개 변수와 함께 모의를 호출 할 수 있습니다.
mockito에 의해 캡처 인수를 적용 할 것이다 확인 자신에 가까운 당신은 뭔가를 작성할 수 있습니다.
Mockito는 내부적으로 호출 및 예컨대과의 인수를 기록합니다 : http://code.google.com/p/mockito/source/browse/trunk/src/org/mockito/internal/matchers/CapturingMatcher.java
-
==============================
3.당신은 specs2을 시도 할 수 있습니다. specs2, 우리는 요소 별명 매개 변수에 대한 계정에 Mockito 호출 클래스를 "공중 납치"
당신은 specs2을 시도 할 수 있습니다. specs2, 우리는 요소 별명 매개 변수에 대한 계정에 Mockito 호출 클래스를 "공중 납치"
trait ByName { def call(i: =>Int) = i } val byname = mock[ByName] byname.call(10) there was one(byname).call(10)
from https://stackoverflow.com/questions/2152019/how-to-mock-a-method-with-functional-arguments-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크 dataframe에서 두 행의 차이 (0) | 2019.11.16 |
---|---|
[SCALA] 생산에서 재생 서버를 시작 스칼라 (0) | 2019.11.16 |
[SCALA] 스칼라의 크로스 제품 (0) | 2019.11.16 |
[SCALA] 점화 / 스칼라 여러 열에서 동일한 기능을 사용 withColumn ()에 호출을 반복 (0) | 2019.11.16 |
[SCALA] 어떻게 플레이에 업로드 된 파일을 제공합니다! 2 스칼라를 사용하고 계십니까? (0) | 2019.11.16 |