1

次の (簡略化された) 例では、scalamock を使用してクラスからフィールドを継承する trait の値をスタブするにはどうすればよいでしょうか?

trait MyTrait extends MyClass
class MyClass(val location: Location)

val expectedValue = ???
val dor: MyTrait = stub[MyTrait]
(dor.location.continuousFeatureValues).returns(expectedValue)
4

2 に答える 2

0

'location' は MyClass のパラメーターですか、それとも MyClass のデータ メンバーですか? MyClass を次のように変更しても問題ありませんか。

class MyClass() {
  val location: Location = new Location
}

問題がなければ、回避策として場所をオーバーライドできます。

//source code
class Location {
  def continuousFeatureValues: String = "location"
}

class MyClass() {
  val location: Location = new Location
}

class MyTrait extends MyClass

// test code
it should "mock" in {
  val loc = mock[Location]
  val dor: MyTrait = new MyTrait {override val location = loc}
  (loc.continuousFeatureValues _).expects().returning("good")
  dor.location.continuousFeatureValues shouldBe ("good")
}
于 2016-10-26T02:54:15.327 に答える
0

デフォルト以外のコンストラクターでクラスを拡張する特性で少し行き止まりになっているので、私はそのコードをリファクタリングします。そのクラスを直接モックする場合でも、それは であるため、その場所でアクションを定義することはできずval、それらは Scala では不変です。すぐに使えるようdefにすれMyTraitMyClass extend MyTrait、デザインはより簡単に操作 (およびモック) できるはずです。

于 2017-03-05T08:47:06.133 に答える