それらをテストするためのケースクラスと関数がほとんどないとします。
case class PersonName(...)
case class Address(...)
case class Phone(...)
def testPersonName(pn: PersonName): Either[String, PersonName] = ...
def testAddress(a: Address): Either[String, Address] = ...
def testPhone(p: Phone): Either[String, Phone] = ...
ここで、新しいケース クラスPerson
とテスト関数を定義します。これは高速で失敗します。
case class Person(name: PersonName, address: Address, phone: Phone)
def testPerson(person: Person): Either[String, Person] = for {
pn <- testPersonName(person.name).right
a <- testAddress(person.address).right
p <- testPhone(person.phone).right
} yield person;
ここで、高速に失敗するのではなく、関数にエラーtestPerson
を蓄積させたいと考えています。
これらすべての関数testPerson
を常に実行して戻りたいと思います。どうやってやるの ?test*
Either[List[String], Person]