Тестування Scala в IntelliJ зі ScalaTest

Language

Існує кілька бібліотек і методологій тестування для Scala, але в цьому посібнику ми продемонструємо один популярний варіант для фреймворку ScalaTest, що називається FunSuite.

Ми припускаємо, що ви знаєте як створити проєкт з 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 та натисніть Enter або двічі клацніть на 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 функція з AnyFunSuite, що збирає результати тверджень (assertions) у тілі функції.
  • "CubeCalculator.cube" назва тесту. Ви можете обрати будь-яку назву, але існує домовленість називати “ClassName.methodName”.
  • assert приймає булеву умову і визначає, пройшов тест чи не пройшов.
  • CubeCalculator.cube(3) === 27 перевіряє чи дорівнює результат функції cube значенню 27. Оператор === є частиною ScalaTest та надає чисті повідомлення про помилки.

Додати інший тест-кейс

  1. Додайте інший тестовий блок з власним assert, що перевіряє значення куба 0.
  2. Виконайте sbt test знову, двічі клацнувши правою кнопкою миші на CubeCalculatorTest та обравши ‘Run CubeCalculatorTest’.

Висновок

Ви побачили один шлях тестування вашого Scala коду. Більше про FunSuite ScalaTest на офіційному вебсайті. Ви можете проглянути інші фреймворки для тестування такі як ScalaCheck та Specs2.

Contributors to this page: