Вы можете проверить вложенные функции в Scala? - PullRequest
10 голосов
/ 17 марта 2011

Есть ли способ протестировать вложенную функцию (в идеале с ScalaTest)?

Например, есть ли способ проверить g() в следующем коде:

def f() = {
  def g() = "a string!"
  g() + "– says g"
}

1 Ответ

8 голосов
/ 17 марта 2011

g не видно за пределами f, так что я осмелюсь сказать, по крайней мере, не без отражения.

Я думаю, что тестирование g в любом случае нарушит концепцию модульного тестирования, потому что вы никогда не должны тестировать детали реализации, а только поведение публичного API.Отслеживание ошибки до ошибки в g является частью процесса отладки, если тесты на f не пройдены.

Если тестирование g важно для вас, определите g как (защищенный) метод за пределамиf.Однако это может нарушить ваш дизайн.

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

...