예를 들어 간단한 추출기 Planex
을 사용하면 .plan 파일 문자열을 분리하여 함께 다시 넣습니다. 나는 그것의 행동을 꽤 철저하게 정의하는 몇 가지 단위 테스트를 가지고있다. 내가 이것을 사용하는 Actor
이케이스 클래스와 추출기를 스칼라로 조롱하거나 스텁 할 수 있습니까?
object Planex {
def apply(metadata: String, plan: String) = {
String.format("%1$sPlan:\n%2$s", metadata, plan)
}
def unapply(str: String) = {
val ixPlanLabel = str indexOf "Plan:"
when(ixPlanLabel>=0) {
(str take ixPlanLabel, (str drop (ixPlanLabel+5)).trim)
}
}
}
: 여기 추출기입니다. PlanRepo 내 테스트에서
class PlanRepo(env: {
val jsonFormats: Formats
val load:() => String
val planTarget: String => Unit
}) extends Actor {
implicit val jsonFormats = env.jsonFormats
def receive = {
case (metaData: String, plan: Plan) => {
val s = Planex(metaData,write(plan))
env.planTarget(s)
}
case r: PlanRequest => {
val Planex(metaData, planStr) = env.load()
self.channel ! (metaData, read[Plan](planStr))
}
}
}
, 나는 Planex
를 제외하고 모든 종속성에 통과 할 수 있어요. 이를 위해, 나는 아직도 콘크리트 추출기 객체를 사용하고있다. 따라서 리포 테스트는 실제로 별도로 테스트 한 Planex
의 동작을 테스트하는 것입니다. 이 문제를 해결할 방법이 있습니까?
이 문서의 json 부분의 계층 구조를 정의하는 중첩 된 사례 클래스 집합과 비슷한 문제가 있습니다. 서로 분리하는 데 문제가 있습니다.
물론입니다. 왜 내가 이것을 생각하지 않았는지 모르겠다. stubbing 중첩 된 사례 클래스에 내 혼란이 남아 있지만, 내가 별도로 그것에 대해 물어볼 것입니다. – traffichazard