Для Scala существует множество библиотек и методологий тестирования, но в этом руководстве мы продемонстрируем один популярный вариант из фреймворка ScalaTest под названием AnyFunSuite.
Это предполагает, что вы знаете, как создать проект в IntelliJ.
Настройка
- Создайте sbt проект в IntelliJ.
- Добавьте зависимость ScalaTest:
- Добавьте зависимость ScalaTest в свой файл
build.sbt:libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % 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означает, что мы тестируемCubeCalculatorextends AnyFunSuiteпозволяет нам использовать функциональность класса AnyFunSuite из ScalaTest, такую как функцияtesttestэто функция из библиотеки FunSuite, которая собирает результаты проверок в теле функции."CubeCalculator.cube"- это имя для теста. Вы можете называть тест как угодно, но по соглашению используется имя — “ClassName.methodName”.assertпринимает логическое условие и определяет, пройден тест или нет.CubeCalculator.cube(3) === 27проверяет, действительно ли вывод функцииcubeравен 27.===является частью ScalaTest и предоставляет понятные сообщения об ошибках.
Добавление еще одного теста
- Добавьте еще один оператор
assertпосле первого, который проверяет 0 в кубе. - Перезапустите тест
CubeCalculatorTest, кликнув правой кнопкой мыши и выбрав Run ‘CubeCalculatorTest’.
Заключение
Вы видели один из способов тестирования Scala кода. Узнать больше о AnyFunSuite от ScalaTest можно на официальном сайте. Вы также можете использовать другие тестовые фреймворки, такие, как ScalaCheck и Specs2.