在处理Scalatest的Prettifier时如何处理类型擦除

时间:2019-02-08 10:28:00

标签: scala unit-testing scalatest type-erasure

为我的Scala应用程序编写单元测试时遇到以下问题:

对于我的单元测试,我不想在输出中看到整个对象(如果测试失败),因为我只关心id。这就是为什么我使用这样的org.scalactic.Prettifier的原因:

case class Node(n: id, doesntMatterString: String)

implicit val prettifier: Prettifier = Prettifier(
  {
    case n: Node=> "n" + n.id
    case ns: Seq[Node] => ns.map("n" + _.id).mkString(",")
  }
)

某些测试可能会输出一个Node,而另一些测试可能会输出Seq[Node]

虽然这通常可行,但我仍然收到以下警告:

non-variable type argument Node in type pattern Seq[Node] (the underlying of Seq[Node]) is unchecked since it is eliminated by erasure

我知道这里存在类型擦除的问题,但是无法弄清楚如何写Prettifier,这样就不会显示此警告。预先感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用递归模式匹配。

这是一个示例(没有Box<c_void>):

0x1

Try it out!