Ведение журнала тестирования Scala / Spark log4j - PullRequest
0 голосов
/ 01 ноября 2018

Я хотел бы сделать несколько модульных тестов для функции внутри моего класса, упрощенный пример:

Class Datachecks {
   df = spark.read.parquet(..)
   val logger = Logger(getClass)
   def logColumns(df: DatFrame): Unit = {
      df.columns.foreach(logger.info(_))
}

Что я тогда хочу проверить с чем-то вроде

Class DataChecksSuite extends FunSuite with initSpark {
   val initDataChecks = new DataChecks()
   val df = spark.read.parquet()
   test("Example test") {
      assert(initDataChecks.logColumns(df) === "myOutput")
   }
}

Теперь я знаю, что это не запустится, потому что мой столбец не выводит строку, и я не хотел бы переписывать / повторно изменять весь мой класс DataChecks, чтобы сделать это возможным.

Теперь мне стало интересно: возможно ли перехватить вывод консоли log4j и превратить его в строку? Или было бы возможно издеваться над моим классом регистратора для вывода строки? (Я пробовал с Mockito, но безуспешно ..)

Мои (обязательные) зависимости - это log4j и FunSuite (если это действительно необходимо, я все равно могу переключиться, но, поскольку проект довольно большой, я бы хотел, чтобы все было согласованно.

Я могу предоставить более подробный пример, когда это необходимо, поскольку это только очень упрощенный пример подделки.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

исправил это между прочим, добавив appender в мой testlog4j2.xml, который регистрирует файл. Тогда я смогу прочитать файл и запустить мои модульные тесты на этом.

0 голосов
/ 01 ноября 2018

как насчет добавления еще одной строки в logColumns следующим образом df.columns.mkString(" ") изменить тип возвращаемого значения метода на String, а затем использовать его для запуска утверждения в вашем тесте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...