2017-10-10 7 views
0

나는 다음과 같은 서명 '프로듀서'라는 클래스를 스텁하려고 : enter image description here :오버로드 생성자를 가진 클래스 스텁 할 수 없습니다 - Scalamock

class Producer[K, V](private val underlying : kafka.producer.Producer[K, V]) extends scala.AnyRef { 
    def this(config : kafka.producer.ProducerConfig) = { /* compiled code */ } 
    def send(message : kafka.producer.KeyedMessage[K, V]) : scala.Unit = { /* compiled code */ } 
    def send(messages : java.util.List[kafka.producer.KeyedMessage[K, V]]) : scala.Unit = { /* compiled code */ } 
    def close : scala.Unit = { /* compiled code */ } 
} 

코드 val fakeProducer = stub[Producer[String, String]]

다음을 오류입니다

나는이 문제를 언젠가 이제 막 고쳤다. 이 스텁 객체를 만들 수있는 방법이 있습니까? 어떤 도움을 주시면 감사하겠습니다.

좋습니다.

답변

0

지금 당장은 IDE가 없으므로 scalamock, kafka, scala의 버전을 잘 모르겠지만 잘하면이 아이디어가 효과적입니다.

나는 당신의 타입을 모의 (mock)하도록 서브 클래스화할 것이고 서브 클래스가 어떤 생성자를 참조하는지 명시 적으로 설명 할 것이다.

class MockableProducer extends kafka.javaapi.producer.Producer[String, String](null.asInstanceOf[kafka.producer.Producer[String,String]) 
val producer = stub[MockableProducer] 

예기치 않은 NPEs 줄 수있는 스텁을 만들 때 Producer 클래스의 모든 sideeffects 여전히 실행된다는 점에 유의