Для этого случая класса:
import io.circe.generic.JsonCodec
@JsonCodec
case class Stuff(things: Array[String])
Этот тест проходит нормально (класс case для теста json):
import io.circe.parser.decode
import io.circe.syntax._
import org.scalatest._
val caseClass = Stuff(things = Array("one", "two"))
val json = caseClass.asJson.spaces2
json shouldEqual
"""{
| "things" : [
| "one",
| "two"
| ]
|}""".stripMargin
Тем не менее, это не удалось (JSON для теста класса случая)
import io.circe.parser.decode
import io.circe.syntax._
import org.scalatest._
val json =
"""{
| "things" : [
| "one",
| "two"
| ]
|}""".stripMargin
val caseClass = Right(decode[Stuff](json))
caseClass shouldEqual Stuff(things = Array("one", "two"))
Проходя через него в отладчике, кажется, что массив не декодируется, как я ожидал, это, похоже, идентификатор объекта / адрес памяти, который всегда отличается, и мой тест не пройден:
[Ljava.lang.String; @ 2fa7ae9
Обратите внимание, что это похоже на то, что происходит с массивами, в моем json-объекте есть много других вещей, которые я оставил в этом примере - Карты и вложенные классы дел все декодируются и могут сравниваться нормально, только когда массивы добавил, что сравнение не удается - я что-то упустил?