Помощник должен быть параметром:
case class A(data1: String, data2: String)(aHelper: AHelper = AHelper(data2))
Теперь в ваших тестах вы можете сделать: A("foo", "bar")(mock[AHelper])
Если вам не нравится второй список параметров, естьнесколько вариантов:
Сделать это неявным:
case class A(data1: String, data2: String)(implicit aHelper: AHelper = AHelper(data2))
Это позволяет создавать экземпляры всего с new A("foo", "bar")
без необходимости вставлять ()
в конец
Или создайте сопутствующий объект:
object A {
def apply(data1: String, data2: String): A = A(data1, data2)(AHelper(data2))
}
Также отметьте , что классы дел с задействованной логикой, которые требуют модульных тестов, ... необычны.Класс Case предназначен для того, чтобы просто хранить данные, кортеж с именованными полями, если хотите.Вам следует подумать о том, чтобы либо разделить свою логику на эти классы, либо вместо этого сделать их «обычными» (не-регистровыми) классами.
Например:
case class A1(data: String)
case class A2(data1: String, data2: A1)
trait AHelper {
def getData(a1: A1)
}
class AReader(helper: AHelper) {
def getData(a: A2) = a.data1 + helper.getData(a.data2))
}
Теперь вопросов неткак правильно это проверить, верно?