1

在下面的(简化的)示例中,如何存根从具有 scalamock 的类中继承字段的特征的值?

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

我会重构该代码,因为它有点像一个死胡同,它具有扩展具有非默认构造函数的类的特征。如果您要直接模拟该类,您仍然无法在位置上定义操作,因为它是 a val,而这些在 Scala 中是不可变的。def启用并MyTrait拥有MyClass extend MyTrait,您的设计应该更易于使用(和模拟)。

于 2017-03-05T08:47:06.133 回答