MUnit Testing – Scala
1. Introduction
This is an article about Munit Testing in Scala. In scala, there are unit testing frameworks that help control the quality of the code. Unit tests can be run in the suite and regression testing can be done by running the suite. There are testing frameworks like ScalaTest and Munit which provide the features of test suite and execution.
2. MUnit Testing
2.1 Prerequisites
SBT is required on windows or any operating system.
2.2 Download
SBT can be downloaded from the website.
2.3 Setup
2.3.1 Scala Setup
To install scala, the download package or executable needs to be executed. To check the setup, let us try a sample code in scala as shown below.
Hello Class
object Hello{ def main(args:Array[String]){ print("Hello Scala \n") } }
Now let us run the code by compiling with scalac and executing the code with scala as shown below:
Hello Class Execution
(base) apples-MacBook-Air:munit_scala bhagvan.kommadi$ scalac Hello.scala (base) apples-MacBook-Air:munit_scala bhagvan.kommadi$ scala Hello Hello Scala (base) apples-MacBook-Air:munit_scala bhagvan.kommadi$
2.4. What is Munit?
Munit is better than Scala Test for unit testing scala programs. It is similar to Junit and easy for newcomers. No additional scala dependencies are required for cross-build. It has better diffs on assertion failures.
2.4.1 MUnit Testing
Let us start with an example scala code. Calculator has two methods – addNumbers, and multNumbers.
Calculator Class
package org.javacodegeeks.munit object Calculator { def addNumbers(n1: Int, n2: Int): Int = { n1 + n2 } def multNumbers(n1: Int, n2: Int): Int = { n1 * n2 } }
2.5 Example
Now let us write a unit test to test the two methods in the calculator Object.
Calculator Unit Test
package org.javacodegeeks.munit import org.javacodegeeks.munit.Calculator class CalculatorSpec extends munit.FunSuite { test("adds two numbers") { assertEquals(Calculator.addNumbers(4, 8), 12) } test("multiplies two numbers") { assertEquals(Calculator.multNumbers(5, 9), 45) } test("considers collections with the same elements equal") { assertEquals(Seq(4, 5), Seq(4, 5)) } }
2.6 Verifying Unit Test Results
Unit test results can be verified by using assert, assertEquals,assertNotEquals,intercept, and assertDiffUnit test results can be verified by creating tests as shown above in the code for add Numbers, multNumbers, and verifying two collections if they are equal. SBT is used for executing the project as shown below.
SBT Project Execution
(base) apples-MacBook-Air:munit_test bhagvan.kommadi$ sbt test [info] Loading project definition from /Users/bhagvan.kommadi/OldDesk/JavacodeGeeks/Code/munit_scala/munit_test/project/project [info] Loading settings for project munit_test-build from plugins.sbt ... [info] Loading project definition from /Users/bhagvan.kommadi/OldDesk/JavacodeGeeks/Code/munit_scala/munit_test/project [info] Loading settings for project munit_test from build.sbt ... [info] Set current project to munit-test (in build file:/Users/bhagvan.kommadi/OldDesk/JavacodeGeeks/Code/munit_scala/munit_test/) org.javacodegeeks.munit.CalculatorSpec: + adds two numbers 0.341s + multiplies two numbers 0.001s + considers collections with the same elements equal 0.004s [info] Passed: Total 3, Failed 0, Errors 0, Passed 3 [success] Total time: 6 s, completed Nov 4, 2022 12:36:18 AM
3. Download the Source Code
You can download the full source code of this example here: Unit Testing – Scala