ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • scalatest-3.2.3 의 property based test
    scala/scalatest 2023. 1. 25. 19:54

    문제

    https://wefree.tistory.com/77 의 property based test 를 scalatest-3.2.3 버전을 이용해 작성해 보자.

    코드

    build.sbt 에 scalatest, scalacheck 라이브러리를 추가한다.

    libraryDependencies ++= Seq(
      "org.scalatest"  %% "scalatest"  % "3.2.3" % Test,
      "org.scalatestplus" %% "scalatestplus-scalacheck" % "3.1.0.0-RC2" % Test
    )

    테스트를 작성한다.

    import org.scalacheck.Gen
    import org.scalatest.BeforeAndAfter
    import org.scalatest.funsuite.AnyFunSuite
    import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks
    
    object Calculator {
      def lastDigit(n: Int): Int = math.abs(n) % 10
      def isDivisibleByFive(n: Int): Boolean = n % 5 == 0
    }
    
    class CalculatorTest extends AnyFunSuite with BeforeAndAfter with ScalaCheckPropertyChecks {
      test("lastDigit table test") {
        val table = Table(
          ("number", "lastDigit"), // First tuple defines column names
          (0, 0),
          (1, 1),
          (-1, 1),
          (12, 2),
          (-12, 2),
          (123, 3)
        )
    
        forAll(table)((number, last) => assert(Calculator.lastDigit(number) === last))
      }
    
      test("isDivisibleByFive property test") {
        forAll { x: Int =>
          whenever(x >= 0) {
            val last = Calculator.lastDigit(x)
            assert(Calculator.isDivisibleByFive(x) === (last == 0 || last == 5))
          }
        }
      }
    
      test("isDivisibleByFive Gen test") {
        val numbers: Gen[Int] = Gen.choose(-1000, 1000).map(_ * 3)
    
        forAll(numbers) { x: Int =>
          val last = Calculator.lastDigit(x)
          assert(Calculator.isDivisibleByFive(x) === (last == 0 || last == 5))
        }
      }
    }

    'scala > scalatest' 카테고리의 다른 글

    BeforeAndAfterAll  (0) 2023.03.21
    BeforeAndAfter  (0) 2023.03.21
    scalatest-3.0.5 에서 scalacheck 의 generator 사용하기  (0) 2022.02.19
    scalatest-3.0.5 의 property based test  (0) 2021.11.14

    댓글

Designed by Tistory.