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 に答える