次の例を検討してください。
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
、フィールドに入力する必要があります。パススルー パラメータのみです。この簡単な例では、それほど多くの作業は必要ありませんが、20 フィールドのクラス階層で 2 つのフィールドを扱うときは、満足できません。そして幸せになりたい。それで、私はいくつかの解決策を探し始めます。race
age
person
1 つの解決策は、空のフィールドを null で埋めることです。ただし、実装を変更すると、テストクラスのコンパイルエラーがテストの失敗に変換されるという欠点があります。そして、これらの null を記述する必要があります。
もう1つの解決策は、メソッドを作成して、対話するパラメーターを受け入れて返すことです。欠点は、名前のないタプルを返す必要があるか、メソッド パラメーターと戻り値の型をカプセル化するいくつかのクラスを作成する必要があることです。
あるいは、stackoverflow の賢い人たちは、私の知性の半盲の目では見ることができない、他の解決策を持っているのかもしれません。:-)