Я хотел бы сделать несколько модульных тестов для функции внутри моего класса, упрощенный пример:
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 (если это действительно необходимо, я все равно могу переключиться, но, поскольку проект довольно большой, я бы хотел, чтобы все было согласованно.
Я могу предоставить более подробный пример, когда это необходимо, поскольку это только очень упрощенный пример подделки.