2015-01-23 1 views
3

형식화 된 값 클래스를 ID로 사용하는 것은 Scala에서 일반적인 패턴입니다. 그러나 Mockito는 값 클래스를 인수로 사용하는 메서드를 스텁하는 경우 문제가있는 것으로 보입니다. 아래 예제에서 실제 값이있는 첫 번째 스텁은 정상적으로 작동하지만 두 번째 스텁은 인수 매처를 사용하여 NullPointerException을 발생시킵니다.값 클래스 인수를 사용하는 Mockito 스터 빙 메소드가 NullPointerException과 함께 실패합니다.

내가 발견 한 유일한 참조는 this question이지만 여기에 나와있는 해결책은 작동하지 않습니다. 누구나이 해결책이나 해결 방법을 알고 있습니까?

버전은 다음과 같습니다 org.mockito : mockito-모든 : 1.10.19org.specs2 : specs2_2.11 : 2.4.15

import org.specs2.mutable.Specification 
import org.specs2.matcher.Matchers 
import org.specs2.mock.Mockito 

case class ID[T](val id:Long) extends AnyVal 

trait DAO[T]{ 
    def get(id:ID[T]):T 
} 

class MockitoIDStubTest extends Specification with Mockito with Matchers{ 
    "Mockito" should{ 
    "properly stub with argument value" in { 
     val m = mock[DAO[String] 
     m.get(ID[String](1)).returns("abc") 
     m.get(ID[String](1)) must_== "abc" 
    } 
    "properly stub with argument matcher" in { 
     val m = mock[DAO[String] 
     m.get(any[ID[String]]).returns("abc") 
     m.get(ID[String](1)) must_== "abc" 
    } 
    } 
} 

[정보] Mockito해야

[info] + 인수 값이있는 올바르게 스텁

[정보]! (MockitoIDStubTest.scala : 20)

[오류] MockitoIDStubTest $$ anonfun $ 1 $$ anonfun $ $ 5 $$ anonfun은 $ $ 6.apply를 적용한 적용 (MockitoIDStubTest 정상적으로 인자 정합과

[오류] NullPointerException이 스터브. 스칼라 : 20)

+0

는 스피 또한 mockito 솔루션을 찾고 http://stackoverflow.com/questions/28140793/scala-specs2-mocking-a-trait-method-returns-always-nullpointer-exception 같은 동일한 문제가 될 수 – MeiSign

답변

1

scalamockscalatest과 작동하는 것으로 보입니다. 나는 여전히 Mockito tho에 대한 해결책을 찾고 싶다. 그래서 나는 수백 개의 테스트를 변경할 필요가 없다.

import org.scalatest._ 
import org.scalamock.scalatest.MockFactory 

case class ID[T](val id:Long) extends AnyVal 

trait DAO[T]{ 
    def get(id:ID[T]):T 
} 

class ScalaMockIDStubTest extends WordSpec with MockFactory{ 
    import language.postfixOps 

    "ScalaMock" should{ 
    "properly stub with argument value" in { 
     val m = stub[DAO[String] 
     (m.get _) when(ID[String](1)) returns("abc") 
     assert(m.get(ID[String](1)) == "abc") 
    } 
    "properly stub with argument matcher" in { 
     val m = stub[DAO[String] 
     (m.get _) when(*) returns("abc") 
     assert(m.get(ID[String](1)) == "abc") 
    } 
    } 
} 
관련 문제