使用类型化值类作为IDs是Scala中的一种常见html" target="_blank">模式。但是,Mockito在对以值类为参数的方法进行存根时似乎有一个问题。在下面的示例中,具有实际值的第一个存根工作得很好,但使用参数匹配器的第二个存根抛出NullPointerException。
我找到的唯一参考是这个问题,但那里显示的解决方案不起作用。有人知道解决这个问题的方法吗?
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"
}
}
}
[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")
}
}
}
我有4个gradle构建文件:当我在android studio中构建时,我经常出现以下错误: 没有方法的签名:org.gradle.model.ModelMap.getDefaultProguardFile()适用于参数类型:(java.lang.String)值:[proguard android.txt] 文件1 文件2 文件3 文件4 请:有人能帮我理解为什么我总是以下错误: 没有方法的签
我已经得到了一个抽象类位置的UML图。该类有一个变量字符串名称。它的方法是addEmployee(employee:employee):boolean。 Employee类与Location类相关联。Employee类必须包含变量String name和String address以及方法getName():String和getAddress():String 我不确定如何制作addEmploye
是否有可能将方法引用与参数一起使用?我喜欢流的想法,我只是想让代码更易读。 实际上,我认为有一个类似的问题,方法引用了一个参数,我读了,但不知道如何在我的代码中使用bind2方法。这是唯一的解决办法吗?
问题内容: 我编写了一个简单的类来测试响应读取实体方法(如果它按我的预期工作)。但是效果不佳。 当我启动课程时,出现以下错误: supported on an outbound message. at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:1
我正在使用Code::Blocks 12.11(使用MinGW),当我想在设置程序参数后启动调试会话时,GDB调试器在一开始就停止执行,整个程序就会冻结。这让我大吃一惊,因为我无法调试需要命令行参数的程序。这是“调试器”窗口中的最后两行(在此之后,什么都没有发生,代码::块冻结): 有谁知道为什么GDB不使用命令行参数的原因?
问题内容: 在Java 8中,具有以下类 可以通过方法引用来调用setBornTrue方法: 但是我将如何使用forEach方法并通过 方法引用 使用setBorn ?试: 导致错误“无法解析方法setBorn”。 另外,我该如何传递True的值? 问题答案: 使用lambda: 没有发现仅使用Java 8 API的其他方法。 使用此自定义功能: 你可以做: 如果Java API或库中提供了这种实