2015-01-23 3 views
3

Использование типизированных классов значений в качестве идентификаторов является общим шаблоном в Scala. Однако кажется, что у Mockito есть проблема при методах stubbing, которые принимают классы значений в качестве аргументов. В приведенном ниже примере первый заглушка, с фактическим значением, работает просто отлично, а второй, который использует аргумент, вызывает вызов NullPointerException.Метод stubbing Mockito с аргументом класса значения не работает с NullPointerException

Единственная ссылка на это я нашел: this question, но решение, показанное там, не работает. Кто-нибудь знает решение этого или обход?

Версии: org.mockito: Mockito-все: 1.10.19 и org.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] + правильно заглушка с аргументом

[info]! правильно заглушки с аргументом согласовани

[ошибка] NullPointerException: (MockitoIDStubTest.scala: 20)

[ошибка] MockitoIDStubTest $$ anonfun $ 1 $$ anonfun $ применяются $ 5 $$ anonfun $ применять $ 6.apply (MockitoIDStubTest. Скала: 20)

+0

может быть таким же вопросом, как http://stackoverflow.com/questions/28140793/scala-specs2-mocking-a-trait-method-returns-always-nullpointer-exception И также ищут решение Mockito – MeiSign

ответ

1

Это похоже на работу с scalamock и scalatest. Я все равно хотел бы найти решение для 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") 
    } 
    } 
} 
Смежные вопросы