运维开发网

scala – 带有值类参数的Mockito stubbing方法因NullPointerException而失败

运维开发网 https://www.qedev.com 2020-07-24 15:47 出处:网络 作者:运维开发网整理
使用类型化值类作为ID是 Scala中的常见模式.但是,当存储将值类作为参数的方法时,Mockito似乎有一个问题.在下面的示例中,具有实际值的第一个存根工作正常,但是使用参数匹配器的第二个存根抛出NullPointerException. 我发现的唯一参考是this question,但那里显示的解决方案不起作用.任何人都知道这个解决方案,或解决方法? 版本是:org.mockito:mocki
使用类型化值类作为ID是 Scala中的常见模式.但是,当存储将值类作为参数的方法时,Mockito似乎有一个问题.在下面的示例中,具有实际值的第一个存根工作正常,但是使用参数匹配器的第二个存根抛出NullPointerException.

我发现的唯一参考是this question,但那里显示的解决方案不起作用.任何人都知道这个解决方案,或解决方法?

版本是:org.mockito:mockito-all: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"
    }
  }
}

[info] Mockito should

[info] + properly stub with argument value

[info] ! properly stub with argument matcher

[error] NullPointerException:(MockitoIDStubTest.scala:20)

[error] MockitoIDStubTest$$anonfun$1$$anonfun$apply$5$$anonfun$apply$6.apply( MockitoIDStubTest.scala:20)

它似乎适用于 scalamock和 scalatest.我仍然希望找到Mockito的解决方案,所以我不必改变几百个测试.

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")
    }
  }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消