考虑这个例子:
case class Home(description: String)
case class Person(age: Int, race: String, home: Home)
def age(p: Person): Person = {
val newAge = p.age + 1
p.copy(age = newAge, home = if (newAge == 18) Home("Under the bridge") else p.home)
}
it("Should move on 18th birthday") {
val person18yrs = age(Person(17, "Caucasian", Home("With parents")))
person18yrs shouldBe Person(18, "Caucasian", Home("Under the bridge"))
}
现在,如果我想测试该方法age
,我需要填写该字段race
,即使该方法age
不会person
根据它的种族来区分对象。它只是传递参数。在这个简单的例子中,工作量并不大,但是当我处理 20 个字段的类层次结构中的两个字段时,我不高兴。我想要快乐。所以我开始四处寻找解决方案。
一种解决方案可能是用空值填充空字段。但不利的一面是,如果我随后更改实现,它会将测试类编译错误转换为测试失败。我仍然需要写这些空值。
另一种解决方案可能是只创建方法,以便它们接受并返回与之交互的参数。缺点是我需要返回元组,它缺少名称,或者我需要创建一些封装方法参数和返回类型的类。
或者,也许 stackoverflow 的聪明人确实有其他解决方案,我的智力的半盲眼是看不到的。:-)