[Scala]implicit을 포함한 private 메소드에 대한 테스트가 실패한다 (invokePrivate)
8553 단어 Scala
invokePrivate
이번에는 다음 방법에 대한 테스트를 작성했습니다.Hoge를 생성하는 메소드
object Sample {
private def generateHoge (hogeId: Int, hogeFlag: Boolean, fugaId: Int)
(implicit hogeRepository: HogeRepository,
fugaRepository: FugaRepository) : Hoge = {
...
Hoge(hogeId, hogeName)
}
}
이에 대한 테스트 작성
val A = PrivateMethod[返り値] ('メソッド名)
val result = オブジェクト名orクラス名 invokePrivate(A(引数))
result should be Hoge(1, "hogehoge")
이번이라면 이런 느낌
val generateHoge = PrivateMethod[Hoge] ('generateHoge)
val result = generateHoge invokePrivate(generateHoge(1, true, 1))
result should be Hoge(1, "hogehoge")
이제 테스트를 실행하면 테스트에 실패합니다.
java.lang.IllegalArgumentException:
Can't find a private method named: generateHoge
invokePrivate의 설명이 통과하지 않은 것 같습니다.
확인해보기
다른 private 메소드에 대한 테스트에서는 동일한 설명으로 통과했습니다.
이번 차이는 implicit의 유무
어떻게 든 전달할 수 있습니다.
val generateHoge = PrivateMethod[Hoge] ('generateHoge)
val result = generateHoge invokePrivate(generateHoge(1, true, 1)(HogeRepository,
FugaRepository))
-> エラー
val generateHoge = PrivateMethod[Hoge] ('generateHoge)(HogeRepository,
FugaRepository)
val result = generateHoge invokePrivate(generateHoge(1, true, 1))
-> エラー
implicit val hogeRepository = HogeRepository
implicit val fugaRepository = FugaRepository
val generateHoge = PrivateMethod[Hoge] ('generateHoge)
val result = generateHoge invokePrivate(generateHoge(1, true, 1))
-> エラー。メソッドの通常呼び出しではないため、implicitを渡してくれない
이 근처에서 상당히 막힘. 원래 공식 README에 기술이 쓰지 않았기 때문에 무리라고 생각하고 잠시 포기했습니다.
해결
절대 같은 증상이 되고 있는 사람이 있다고 생각하고 기합으로 구구리 뛰고 있으면, 이하의 기사가 히트
정확히 같은 증상으로 응답에 "지원하지 않게 쓰여져 있지만 일반 인수처럼 전달하면 가능"이라고 설명
즉, 이렇게 쓰면 가능할 것입니다.
val generateHoge = PrivateMethod[Hoge] ('generateHoge)
val result = generateHoge invokePrivate(generateHoge(1, true, 1, HogeRepository, FugaRepository))
result should be Hoge(1, "hogehoge")
오류 없음, 통과했습니다.
상당히 오랜 시간 격투했기 때문에, 누군가의 도움이 된다고 생각합니다.
모처럼 대응하고 있으니까 README에 써 두고 싶었어・・・
Reference
이 문제에 관하여([Scala]implicit을 포함한 private 메소드에 대한 테스트가 실패한다 (invokePrivate)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mikene_koko/items/312c40bda998d1b4420d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)