Scala Test Cases Generation
Since: 2.74.0
This document explains how to generate test cases in scala from saved morphir tests.
Morphir offers a way to generate scala test cases from test cases created using the morphir develop UI.
Test cases can be generated by adding additional flags to the gen command, i.e morphir scala-gen [test-gen-flag]
.
The gen flags for tests can be mixed together to generate different kinds of test.
Generating tests creates a sub-package called _morphirtests
, at the package root of the generated scala, containing scala files
matching the selected kind of test(s).
Here's what the packages look like if your Morphir project is named **foo**
- foo/ /* package root */
- (...) /* other sub packages and files */
- _morphirtests/
- [TestKind].scala /* eg: GenericTest.Scala */
Flags for Tests Generation​
This tooling also provides some flags to generate a runnable test suite using scala test or just generate generic test cases.
Using --generate-test-generic
​
Usage:
morphir scala-gen --generate-test-generic
This generates a scala value with a TestCase
case class.
Example:
/*
testInput =
{
input = "Foo",
expectedOutput = "Foo",
description = "foo description"
}
*/
object GenericTest {
case class TestCase(input: Any, expectedOutput: Any, description: String)
val testCases : List[TestCase] = List(
TestCase(
input = "Foo",
expectedOutput = "Foo",
description = "testInput test1 - foo description"
)
)
}
Using the generated test cases​
You will need to manually write out the tests in scala and import the generated testcases
example:
test("morphir tests should not fail") {
val suite = GenericTest.testCases
suite.foreach((testcase) => {
assertResult(testcase.expectedOutput)(testcase.input)
})
}
Using --generate-test-scalatest
​
Usage:
morphir scala-gen --generate-test --test-strategy=ScalaTest
This generates a complete runnable test suite that just can be run.
Using this also introduces dependency on org.scalatest::scalatest-funsuite
that you can manually add as a project dependency.
To create a test description, it uses
- the fully qualified function name
- a sequential integer
- and the original description provided.
example:
/*
testInput =
{
input = "Foo",
expectedOutput = "Foo",
description = "foo description"
}
*/
class ScalaTest extends AnyFunSuite {
test("testInput test1 - foo description") {
assertResult("Foo")("Foo")
}
}