Skip to content

Reporters

Mull comes with several different reporters, each suited for a different use-case.

ReporterBest used for
IDELocal development — results printed inline, same format as compiler warnings
SQLiteAggregating results across multiple runs or binaries before generating a final report
GitHubAnnotationsCI on GitHub — surviving mutants appear as inline comments on pull requests
SARIFGitHub Code Scanning — upload surviving mutants as security alerts to the GitHub Security tab (see guide)
ElementsSharing a rich, interactive HTML report with your team
PatchesInspecting individual mutants — generates a patch file per mutant for detailed review

Both mull-runner and mull-reporter share the same reporters and the same reporter configurations.

Typical usage is as follows:

Terminal window
# runs mutants from `test.exe` and stores results into files `/tmp/a-report.txt` and `/tmp/a-report.sqlite`
# for the `IDE` and `SQLite` reporters, respectively
mull-runner-22 test.exe -reporters IDE -reporters SQLite -report-dir /tmp -report-name a-report
# generates an `IDE` report from `/tmp/a-report.sqlite` and prints results into stdout
mull-reporter-22 /tmp/a-report.sqlite

See the mull-runner CLI and mull-reporter CLI refs for more details.

This is the default reporter, it is enabled even if none of the reporters are specified. It is designed after the typical warnings and errors produced by a compiler.

By default, it prints results to stdout, e.g.:

Terminal window
mull-runner-22 range_tests
[info] Using config /workspaces/mull/demo/mull.yml
[warning] Could not find dynamic library: libc.so.6
[info] Warm up run (threads: 1)
[################################] 1/1. Finished in 3ms
[info] Baseline run (threads: 1)
[################################] 1/1. Finished in 0ms
[info] Running mutants (threads: 7)
[################################] 7/7. Finished in 3ms
[info] Survived mutants (2/7):
/workspaces/mull/demo/main.c:5:16: warning: Survived: Replaced >= with > [cxx_ge_to_gt]
return value >= min && value < max;
^
/workspaces/mull/demo/main.c:5:32: warning: Survived: Replaced < with <= [cxx_lt_to_le]
return value >= min && value < max;
^
[info] Mutation score: 71%
[info] Surviving mutants: 2
[info] Total execution time: 34ms

In case -report-name/-report-dir is provided, the same output is stored in $dir/$file.txt.

This is a reporter which is useful for post-processing or aggregation of the results across several runs.

See Multiple Test Targets guide for an example.

By default, stores the result in the current folder with the file name $timestamp.sqlite.

In case -report-name/-report-dir is provided, the report is stored in $dir/$file.sqlite.

This reporter is useful in the context of GitHub pull requests.

It prints annotations to the stdout, the annotations are then presented in the GitHub UI.

The -report-name/-report-dir args are ignored.

Mutation Testing Elements is an open-source web component for visualizing mutation testing results, originally developed by the Stryker project. It renders an interactive HTML report that lets you browse mutants by file, filter by status, and drill into individual mutations — making it easier to share and review results with a team compared to plain text output.

This reporter generates a self-contained HTML report in that format.

By default, it generates the report in the current working directory $timestamp.html/$timestamp.json.

In case -report-name/-report-dir is provided, the report is stored in $dir/$file.html and $dir/$file.json.

See the dashboard example here: stryker-net/master - Stryker Dashboard.

SARIF (Static Analysis Results Interchange Format) is a standard JSON format for static analysis tool output. GitHub Code Scanning can ingest SARIF files and display the results as alerts in the repository’s Security tab, making it possible to track surviving mutants alongside other code quality issues.

This reporter generates a SARIF 2.1.0 file containing only survived mutants — killed mutants are not included. Survived mutants are reported as warning-level results; mutants that were not covered by any test are reported as note-level results.

By default, the report is stored in the current working directory as $timestamp.sarif.

In case -report-name/-report-dir is provided, the report is stored in $dir/$file.sarif.

By default, file paths in the SARIF output are absolute. When uploading to GitHub Code Scanning, use --report-patch-base <DIR> to strip the given directory prefix from all paths and emit relative URIs instead. This allows GitHub to correctly map results to files in the repository:

Terminal window
mull-runner-22 --reporters Sarif --report-name results --report-patch-base /path/to/repo ./tests

This reporter generates a separate git-compatible patch-file for each mutation.

By default, it stores patchfiles in the directory $PWD/%timestamp-patches.

In case -report-name/-report-dir is provided, the report is stored under $dir/$file-patches/ directory.

See Generating Patches guide for more details.