Модульный тест Scala: как проверить возвращенный RDD - PullRequest
0 голосов
/ 06 июля 2018

Я написал метод для фильтрации дубликатов из RDD и решил написать модульный тест для метода. Вот мой метод:

  def filterDupes(salesWithDupes: RDD[((String, String), SalesData)]): RDD[((String, String), SalesData)] = {
    salesWithDupes.map(salesWithDupes => ((salesWithDupes._2.saleType, salesWithDupes._2.saleDate), salesWithDupes))
      .reduceByKey((a, _) => a)
      .map(_._2)
  }

Поскольку это мой первый опыт написания теста в Scala, я столкнулся с несколькими сложностями. Правильно ли я передаю элементы из списка в метод фильтрации?

Теперь я застрял с тем, как проверить результат, возвращаемый методом. Единственный подход, который я предложил, - это сбор данных RDD в список и проверка их размера. Это правильный путь?

Вот как я вижу логику теста:

"Sales" should "be filtered" in {

    Given("Sales RDD")

    val rddWithDupes = sc.parallelize(Seq(
  (("metric1", "metric2"), createSale("1", saleType = "Type1", saleDate = "2014-10-12")),
  (("metric1", "metric2"), createSale("2", saleType = "Type1", saleDate = "2014-10-12")),
  (("metric1", "metric2"), createSale("3", saleType = "Type3", saleDate = "2010-11-01"))
))

    When("Sales RDD is filtered")

    val filteredResult = SalesProcessor.filterDupes(rddWithDupes).collect.toList

    Then("Sales are filtered")
    filteredResult.size should be(2)
    ????
  }

1 Ответ

0 голосов
/ 06 июля 2018

Единственный подход, который я предложил на данный момент, - это сбор данных RDD в список, а затем проверка их размера.Это правильный путь?

Да, это так.Распределенные объекты не имеют осмысленного понятия равенства и не имеют таких уловок, как:

  • проверка того, равен ли размер.
  • проверка, является ли вычитание a из b пустым
  • проверяя, является ли вычитание b из a пустым

вы не можете реально сравнить два RDD.

Существует также другая проблема - недетерминированный характер операций тасования (например, * 1017).*).Вы должны предположить, что результат может отличаться при каждом запуске и проектных тестах соответственно.

Это делает тестирование довольно сложным.На практике я бы рекомендовал протестировать каждую функцию, используемую в преобразовании (избегать непроверенного анонимного беспорядка), и проверять только гарантированные инварианты (размер, набор ключей и т. Д.).

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