为什么我不能告诉mock它应该期望一个类的实例,而不显式地给出类型呢?我的意思是:
val myClass = new MyClass(...)
val traitMock = mock[MyTrait]
(traitMock.mymethod _).expects(myClass).returning(12.3)不起作用,而
val myClass: MyClass = new MyClass(...)
val traitMock = mock[MyTrait]
(traitMock.mymethod _).expects(myClass).returning(12.3)确实行得通。为什么类型不能被推断?
我在build.sbt中的测试部分是
libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest" % "3.0.0" % "test"
exclude("org.scala-lang", "scala-reflect")
exclude("org.scala-lang.modules", "scala-xml")
)
libraryDependencies += "org.scalamock" %% "scalamock-scalatest-support" % "3.3.0" % "test"因为我被要求提供MyClass (这里是SpacePoint ):
trait SpacePoint {
val location: SpaceLocation
}
val sp = new SpacePoint {
override val location: SpaceLocation = new SpaceLocation(DenseVector(1.0, 1.0))
}发布于 2016-10-25 21:58:36
所以实际上它对我来说是有效的,,,it,。让我在代码中提到类型推断:
val myClass = new MyClass(...)与ScalaMock没有任何关系,但由scala本身保证。下面我将使用库版本和类的源代码来指定工作示例。
测试库:
"org.scalatest" %% "scalatest" % "2.2.4" % "test",
"org.scalamock" %% "scalamock-scalatest-support" % "3.2.2" % "test"类的源代码:
class MyClass(val something: String)
trait MyTrait {
def mymethod(smth: MyClass): Double
}测试源码:
import org.scalamock.scalatest.MockFactory
import org.scalatest.{Matchers, WordSpec}
class ScalamockTest extends WordSpec with MockFactory with Matchers {
"ScalaMock" should {
"infers type" in {
val myClass = new MyClass("Hello")
val traitMock = mock[MyTrait]
(traitMock.mymethod _).expects(myClass).returning(12.3)
traitMock.mymethod(myClass) shouldBe 12.3
}
}
}希望能有所帮助。一旦您提供更多详细信息,将随时更新答案。
https://stackoverflow.com/questions/40237049
复制相似问题