0

为什么我不能告诉一个模拟它应该期待一个类的实例而不明确给出类型?这就是我的意思:

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))
}
4

1 回答 1

1

所以实际上它对我有用。让我在代码中提到类型推断:

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
    }
  }
}

希望能帮助到你。一旦您提供更多详细信息,将准备更新答案。

于 2016-10-25T13:58:36.003 回答