Тестирование Scala в IntelliJ с помощью ScalaTest

Language

Для Scala существует множество библиотек и методологий тестирования, но в этом руководстве мы продемонстрируем один популярный вариант из фреймворка ScalaTest под названием AnyFunSuite.

Это предполагает, что вы знаете, как создать проект в IntelliJ.

Настройка

  1. Создайте sbt проект в IntelliJ.
  2. Добавьте зависимость ScalaTest:
    1. Добавьте зависимость ScalaTest в свой файл build.sbt:
       libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.11" % Test
      
    2. Если вы получили уведомление “build.sbt was changed”, выберите auto-import.
    3. Эти два действия заставят sbt подгрузить библиотеки ScalaTest.
    4. Дождитесь окончания синхронизации sbt; в противном случае, AnyFunSuite и test() не будет распознаны.
  3. На панели проекта слева разверните src => main.
  4. Щелкните правой кнопкой мыши на scala и выберите New => Scala class.
  5. Назовите новый класс CubeCalculator, измените Kind на object, или дважды щелкните на object.
  6. Вставьте следующий код:
     object CubeCalculator:
       def cube(x: Int) =
         x * x * x
    

Создание теста

  1. На панели проекта слева разверните src => test.
  2. Щелкните правой кнопкой мыши на scala и выберите New => Scala class.
  3. Назовите новый класс CubeCalculatorTest и нажмите Enter или дважды щелкните на class.
  4. Вставьте следующий код:
     import org.scalatest.funsuite.AnyFunSuite
        
     class CubeCalculatorTest extends AnyFunSuite:
       test("CubeCalculator.cube") {
         assert(CubeCalculator.cube(3) === 27)
       }
    
  5. В исходном коде щелкните правой кнопкой мыши на CubeCalculatorTest и выберите Run ‘CubeCalculatorTest’.

Разбор кода

Давайте разберем код построчно:

  • class CubeCalculatorTest означает, что мы тестируем CubeCalculator
  • extends AnyFunSuite позволяет нам использовать функциональность класса AnyFunSuite из ScalaTest, такую как функция test
  • test это функция из библиотеки FunSuite, которая собирает результаты проверок в теле функции.
  • "CubeCalculator.cube" - это имя для теста. Вы можете называть тест как угодно, но по соглашению используется имя — “ClassName.methodName”.
  • assert принимает логическое условие и определяет, пройден тест или нет.
  • CubeCalculator.cube(3) === 27 проверяет, действительно ли вывод функции cube равен 27. === является частью ScalaTest и предоставляет понятные сообщения об ошибках.

Добавление еще одного теста

  1. Добавьте еще один оператор assert после первого, который проверяет 0 в кубе.
  2. Перезапустите тест CubeCalculatorTest, кликнув правой кнопкой мыши и выбрав Run ‘CubeCalculatorTest’.

Заключение

Вы видели один из способов тестирования Scala кода. Узнать больше о AnyFunSuite от ScalaTest можно на официальном сайте. Вы также можете использовать другие тестовые фреймворки, такие, как ScalaCheck и Specs2.

Contributors to this page: