【问题标题】:Mockito stubbing method with value class argument fails with NullPointerException具有值类参数的 Mockito 存根方法因 NullPointerException 而失败
【发布时间】:2015-01-23 13:29:15
【问题描述】:

使用类型化的值类作为 ID 是 Scala 中的常见模式。但是,在对将值类作为参数的方法进行存根时,Mockito 似乎存在问题。在下面的示例中,具有实际值的第一个存根可以正常工作,但使用参数匹配器的第二个存根会抛出 NullPointerException。

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

版本为:org.mockito:mockito-all: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] + 带有参数值的正确存根

[信息]!使用参数匹配器正确存根

[错误] NullPointerException:(MockitoIDStubTest.scala:20)

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

【问题讨论】:

标签: scala nullpointerexception mockito specs2 value-class


【解决方案1】:

它似乎适用于 scalamockscalatest。我仍然想为 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")
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多