When a mutant times out, the framework stopped the test run because it exceeded an allowed time. In Stryker, that outcome is reported as its own state, Timeout, and it counts as detected, the same as a killed mutant, in the mutation score. The status doesn’t say why the run was slow. The mutant may have created an infinite loop. It may just have made the code slower. Or the allowance may be too short for your machine. Other tools use different formulas, and mutmut doesn’t share Stryker’s definitions.
What a timeout actually means
A timeout is an operational outcome, not a diagnosis. The tool runs your tests with one mutation switched on. If that run doesn’t finish within the computed deadline, the tool aborts it and records the mutant as timed out. Without a deadline, a mutation that turns i++ into i-- in a loop condition could hang your build forever.
Stryker’s configuration documentation for Stryker JS puts the underlying problem this way: “When Stryker is mutating code, it cannot determine indefinitely whether a code mutation results in an infinite loop (see Halting problem).” A time limit is the practical substitute for an answer that can’t be computed.
Does a timeout count as killed?
In Stryker, a timeout counts as detected, though its status label stays separate from “Killed”. Stryker’s mutant-state documentation gives the reasoning: a CI build would notice a test run that never completes. Its metrics group killed + timeout as detected and survived + no coverage as undetected. The mutation score is detected mutants divided by valid mutants.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Two things follow:
- Timeouts raise your score in the same way kills do. A run with many timeouts can look healthier than it is if those timeouts come from a too-tight allowance instead of real infinite loops.
- Runtime errors and compile errors are not valid mutants in Stryker’s model, so they sit outside the score’s denominator. Don’t mix them up with timeouts.
Stryker’s FAQ makes the same distinction: timed-out mutants are treated as killed for scoring, while errors are not included.
How the frameworks compute the deadline
| Framework | Timeout status and score | Deadline basis | Documented defaults |
|---|---|---|---|
| Stryker JS | Timeout counts as detected | Initial run’s net time × factor, plus an absolute allowance, plus measured overhead | timeoutMS 5000; timeoutFactor 1.5 |
| Stryker .NET | Timeout counts as detected | Per mutant, from initial run time and the estimated time of tests covering that mutant (or the session’s tests when mutants are grouped), a ratio, and an additional allowance | timeout-ratio 1.5; additional-timeout 3000 ms |
| Stryker4s | Not separately established on the page consulted | Initial-run net time × timeoutFactor, plus an absolute timeout |
Not stated |
| mutmut | Stryker’s labels and score definition should not be assumed | (Original test duration + a constant) × a multiplier | Settings are marked unstable; not stated here |
These values come from each project’s documentation pages. Pages didn’t consistently show a publication date or release number, so treat them as documentation values, not guarantees for every version.
Stryker JS
The deadline scales with how long your suite normally takes. The factor sets tolerance relative to that baseline, and the absolute timeoutMS adds a fixed cushion. The documentation says to raise the allowance when mutants produce slower code or when a busy machine needs more time.
Stryker .NET
The calculation is per mutant, which is finer-grained than a single suite-wide figure. A mutant covered by a handful of fast tests gets a smaller deadline than one covered by a slow integration test. The documentation also notes that Stryker aborts a unit test run for a mutant as soon as one test fails, “because this is enough to confirm the mutant is killed.” So normal kills usually end early, and only mutants that no test catches run long enough to hit the deadline. It cautions against lowering the allowance unless you’re confident the mutations are creating endless loops.
Recommended Free Tools
Stryker4s
Stryker4s follows the same factor-plus-absolute pattern as Stryker JS. The page doesn’t establish a release version or date, so check the installed version before relying on exact option names or defaults.
mutmut
mutmut documents its own formula, based on original test duration plus a constant, multiplied by a multiplier. It labels the timeout settings unstable, so they may change between minor versions. It also says that changing result-affecting settings, timeout included, automatically invalidates affected cached results. Don’t read Stryker’s “timeout is detected” rule into mutmut unless mutmut’s current documentation says so.
Rank #4
Telling an infinite loop from a slow run
The status can’t separate these causes, so you have to. Work through these checks:
- Identify the framework and version. Statuses, formulas, defaults and score denominators differ.
- Look at the mutation. A change to a loop bound, increment or termination condition is a plausible infinite loop. A change in unrelated code is more suspicious of slowness or environment.
- Compare the deadline with the baseline. If your initial run is short, the factor-based part of the deadline is small, and the absolute allowance does most of the work. A CPU-starved CI runner can push a normal run past it.
- Run the covering tests with the mutant applied, with a much longer limit. If they finish, the mutant was slow, not infinite. If they never finish, you’ve confirmed a loop.
- Check for load. Parallel workers or a busy machine are the cases the Stryker JS and Stryker4s documentation point to for raising the absolute allowance.
How to change the timeout
Use the setting that matches your tool:
- Stryker JS: raise
timeoutMSfor a busy machine or consistently slow mutants; raisetimeoutFactorif the slowdown scales with your suite’s runtime. - Stryker .NET: adjust
additional-timeout(documented default 3000 ms) ortimeout-ratio(documented default 1.5). - Stryker4s: adjust
timeoutortimeoutFactor, after confirming the names in your installed version. - mutmut: use the timeout settings in the documentation for your installed release, remembering they are marked unstable.
Raising the limit lets slow but terminating runs finish and be judged on their merits, at the cost of waiting longer on genuine loops. Lowering it saves time on runaway mutants but risks reclassifying slow, legitimate runs as timeouts. In Stryker, that inflates the score. The documentation offers no universal best value, and neither does this article. Tune against your own baseline and failure patterns.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteQuick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




