Как справиться со стиранием типов при работе с Prettifier Scalatest - PullRequest
0 голосов
/ 08 февраля 2019

Я столкнулся со следующей проблемой при написании модульных тестов для моего приложения 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 голосов
/ 08 февраля 2019

Попробуйте использовать рекурсивное сопоставление с образцом.

Вот пример (без Prettifier):

case class Id(id: String)
case class Node(n: Id, s: String)

def prettifyRec(a : Any): String = a match {
   case Node(n, _) => "n" + n.id
   case ((n: Node) :: Nil) => prettifyRec(n)
   case ((n: Node) :: (tail: Seq[_])) => prettifyRec(n) + "," + prettifyRec(tail)
   case _ => "ERR"
}

println(prettifyRec(Seq(Node(Id("e"), "i"))))

Попробуйте!

...