scala – 带有值类参数的Mockito stubbing方法因NullPointerExce
发布时间:2020-12-16 08:44:10 所属栏目:安全 来源:网络整理
导读:使用类型化值类作为ID是 Scala中的常见模式.但是,当存储将值类作为参数的方法时,Mockito似乎有一个问题.在下面的示例中,具有实际值的第一个存根工作正常,但是使用参数匹配器的第二个存根抛出NullPointerException. 我发现的唯一参考是this question,但那里显
使用类型化值类作为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" } } }
解决方法
它似乎适用于
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") } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |