How do I run tests and see results in EK9?
← Testing · Ref: Q157
EK9 provides a built-in test runner with multiple output formats and coverage reporting. Use the -t flag to run tests from the command line.
THE -t FLAG
Run all tests in a file:
ek9 -t file.ek9
This runs every @Test program and reports results in human-readable format.
OUTPUT FORMATS
EK9 supports multiple output formats:
ek9 -t file.ek9 # Human-readable (default) ek9 -t0 file.ek9 # Terse (pass/fail only) ek9 -t2 file.ek9 # JSON (for AI/tool parsing) ek9 -t3 file.ek9 # JUnit XML (for CI integration)
RUNNING TEST GROUPS
Run a specific test group:
ek9 -tg database file.ek9
This runs only tests marked with @Test: "database".
LISTING TESTS
List all tests without running them:
ek9 -tL file.ek9
COVERAGE
Run tests with coverage reporting:
ek9 -tC file.ek9 # Coverage summary after tests ek9 -t4 file.ek9 # Detail JSON coverage ek9 -t5 file.ek9 # Verbose coverage ek9 -t6 file.ek9 # HTML coverage report
Coverage must be at least 80% for packaging with -P.
EXIT CODES
The test runner uses specific exit codes:
- 0: all tests pass, coverage OK - 11: one or more tests failed - 12: tests pass but coverage below 80%
See Q155 for writing tests. See Q156 for assertions. See Q2 for compile and run. See Q204 for black-box testing. See Q206 for test coverage. See Q322 for profiling data. See Q628 for profiling tests. See Q749 for fuzzing overview. See Q754 for automatic test generation.
Example
#!ek9 defines module qa.testing.running defines function multiply() as pure -> first as Integer second as Integer <- rtn as Integer: first * second defines program // === BASIC TEST === @Test MultiplyTest() stdout <- Stdout() result <- multiply(6, 7) assert result == 42 stdout.println("6 * 7 = " + $result) // === GROUPED TEST === // Run this group only with: ek9 -tg math file.ek9 @Test: "math" AdditionTest() stdout <- Stdout() assert 2 + 2 == 4 stdout.println("Addition test passed") @Test: "math" SubtractionTest() stdout <- Stdout() assert 10 - 3 == 7 stdout.println("Subtraction test passed") // === DEMONSTRATING TEST STRUCTURE === // Run all tests: ek9 -t file.ek9 // Run math group only: ek9 -tg math file.ek9 // JSON output: ek9 -t2 file.ek9 // JUnit XML output: ek9 -t3 file.ek9 // With coverage: ek9 -tC file.ek9
Common mistakes
E50060 — Integer has no intValue() method. multiply() already returns an Integer. See ek9 -h E50060 for details.
Incorrect:
result <- multiply(6, 7).intValue()
Correct:
result <- multiply(6, 7)
E50060 — Integer has no toString() method. Use the $ prefix operator for string conversion or string concatenation. See ek9 -h E50060 for details.
Incorrect:
stdout.println(result.toString())
Correct:
stdout.println("6 * 7 = " + $result)
Other ways to ask this
- How do I run EK9 tests from the command line?
- How do I check test coverage in EK9?
- What test output formats does EK9 support?
Coming from another language?
Java: mvn test or gradle test with JUnit, JaCoCo for coverage. Python: pytest with pytest-cov for coverage. Rust: cargo test with tarpaulin for coverage. Go: go test -v with go test -cover. EK9: built-in ek9 -t runner with JSON/JUnit XML output formats and integrated coverage via -tC flags, no external tools needed.
Keywords: assert, compile, coverage, format, group, json, junit, output, result, results, run, runner, test, verify