Для Scala существует множество библиотек и методологий тестирования, но в этом руководстве мы продемонстрируем один популярный вариант из фреймворка ScalaTest под названием AnyFunSuite.
Это предполагает, что вы знаете, как создать проект в IntelliJ.
Настройка
- Создайте sbt проект в IntelliJ.
- Добавьте зависимость ScalaTest:
- Добавьте зависимость ScalaTest в свой файл
build.sbt
:libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.11" % Test
- Если вы получили уведомление “build.sbt was changed”, выберите auto-import.
- Эти два действия заставят
sbt
подгрузить библиотеки ScalaTest. - Дождитесь окончания синхронизации
sbt
; в противном случае,AnyFunSuite
иtest()
не будет распознаны.
- Добавьте зависимость ScalaTest в свой файл
- На панели проекта слева разверните
src
=>main
. - Щелкните правой кнопкой мыши на
scala
и выберите New => Scala class. - Назовите новый класс
CubeCalculator
, измените Kind наobject
, или дважды щелкните наobject
. - Вставьте следующий код:
object CubeCalculator: def cube(x: Int) = x * x * x
Создание теста
- На панели проекта слева разверните
src
=>test
. - Щелкните правой кнопкой мыши на
scala
и выберите New => Scala class. - Назовите новый класс
CubeCalculatorTest
и нажмите Enter или дважды щелкните наclass
. - Вставьте следующий код:
import org.scalatest.funsuite.AnyFunSuite class CubeCalculatorTest extends AnyFunSuite: test("CubeCalculator.cube") { assert(CubeCalculator.cube(3) === 27) }
- В исходном коде щелкните правой кнопкой мыши на
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 и предоставляет понятные сообщения об ошибках.
Добавление еще одного теста
- Добавьте еще один оператор
assert
после первого, который проверяет 0 в кубе. - Перезапустите тест
CubeCalculatorTest
, кликнув правой кнопкой мыши и выбрав Run ‘CubeCalculatorTest’.
Заключение
Вы видели один из способов тестирования Scala кода. Узнать больше о AnyFunSuite от ScalaTest можно на официальном сайте. Вы также можете использовать другие тестовые фреймворки, такие, как ScalaCheck и Specs2.