How do I write parameterized tests in EK9?
← Testing · Ref: Q205
EK9 parameterized tests accept typed parameters via standard program parameter syntax. Test data comes from external files.
PARAMETERIZED TEST PROGRAM
Declare parameters with the -> syntax:
@Test MyTest() -> input as String stdout <- Stdout() stdout.println("Got: " + input)
TEST DATA FILES
Each test case has:
commandline_arg_<N>.txt - input parameters expected_case_<N>.txt - expected output
Where N is the case number (1, 2, 3, ...).
TYPED PARAMETERS
Parameters are strongly typed. The compiler validates types at compile time, not at test runtime.
MULTIPLE PARAMETERS
@Test Calculator() -> a as Integer b as Integer stdout <- Stdout() stdout.println($a + b)
See Q204 for black-box testing. See Q155 for basic testing. See Q2 for compile and run.
Example
defines module qa.testdeep.parameterized defines program // === PARAMETERIZED TEST PATTERN === // @Test programs accept parameters just like regular programs. // Test data comes from external files: // commandline_arg_1.txt, expected_case_1.txt // commandline_arg_2.txt, expected_case_2.txt ParameterizedTestDemo() stdout <- Stdout() stdout.println("Parameterized test pattern:") stdout.println(" 1. @Test program with -> parameters") stdout.println(" 2. commandline_arg_N.txt for inputs") stdout.println(" 3. expected_case_N.txt for outputs") stdout.println(" 4. Same test logic, different data") stdout.println("Parameters are strongly typed")
Common mistakes
E50010 — Variables must be declared before use. Using stdout before declaring it with '<-' is a forward reference. See ek9 -h E50010 for details.
Incorrect:
stdout.println("Parameterized test pattern:") stdout <- Stdout()
Correct:
stdout <- Stdout() stdout.println("Parameterized test pattern:")
Other ways to ask this
- How do I run the same test with different data in EK9?
- How do data-driven tests work in EK9?
- How do I pass parameters to EK9 tests?
Coming from another language?
Java: JUnit @ParameterizedTest with @ValueSource/@CsvSource. Python: @pytest.mark.parametrize. Rust: custom macros or rstest crate. Go: table-driven tests with struct slices. Kotlin: JUnit parameterized or Kotest forAll. EK9: standard program parameters with commandline_arg/expected_case file pairs.
Keywords: multiple, test, parameterized, coverage, commandline, generic, case, expected, data-driven, input