Тестирование приватных методов, которые принимают универсальный тип, используя PrivateMethodTester - PullRequest
0 голосов
/ 26 июня 2018

Как я могу протестировать закрытый метод, который принимает универсальный тип, используя privateMethodTester в scala?

Допустим, у меня есть следующий метод:

private def parseValueForJsonKeyWithReturnType[A: TypeTag](
   node: JsonNode, 
   key: String, 
   defaultValue: Option[A] = None): A = {

    val parsedValue = Option(node.get(key)).map(value => { 
      typeOf[A] match {
         case t if t =:= typeOf[String] =>
           value.textValue()
         case t if t =:= typeOf[Double] =>
           value.asDouble()
         case t if t =:= typeOf[Long] =>
           value.asLong()
         case _ => throw new RuntimeException(s"Doesn't support conversion to [type=${typeOf[A]}] for [key=${key}]")
       }
    })

    parsedValue.getOrElse(defaultValue.get).asInstanceOf[A]
  }

Я могу вызвать метод следующим образом

parseValueForJsonKeyWithReturnType[Boolean](jsonNode, key="hours")
parseValueForJsonKeyWithReturnType[String](jsonNode, key="hours")
parseValueForJsonKeyWithReturnType[Long](jsonNode, key="hours")

В тесте я пытаюсь сделать

val parseValueForJsonKeyWithReturnTypeInt = PrivateMethod[Int]('parseValueForJsonKeyWithReturnType)
a[RuntimeException] shouldBe thrownBy (object invokePrivate parseValueForJsonKeyWithReturnType[Int](jsonNode, "total" , None))

, чтобы убедиться, что он выдаст исключение времени выполнения для неподдерживаемого типа

Но я получаю эту ошибку:

error: value parseValueForJsonKeyWithReturnType of type SerializerTest.this.PrivateMethod[Int] does not take type parameters.

Если я пытаюсь без параметров типа, сборка завершается успешно, но я получаю недопустимое исключение ArgumentException

Expected exception java.lang.RuntimeException to be thrown, but java.lang.IllegalArgumentException was thrown. 

Cause: java.lang.IllegalArgumentException: Can't find a private method named: parseValueForJsonKeyWithReturnType

Что я делаю не так?Возможно, синтаксис неправильный.

...