我有两个案例类 A 和 AHelper
awk 'BEGIN{OFS="\t"} {sub(/\r$/,"");print $1 $2,"1"}' Input_file
class A 具有 AHelper 的实例作为其成员之一。
我只想编写 A 的单元测试,嘲笑 AHelper
Scala版本:2.11
答案 0 :(得分:3)
助手应该是一个参数:
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))
}
现在,毫无疑问该如何正确测试了,对吧?