Uncaught Exception Path
Fires when throw new is added without a corresponding Assert.Throws or Should().Throw assertion in the test suite.
Why this rule exists
An exception added without a test is a contract change with no safety net. Callers that relied on the old behavior break silently; future refactors cannot tell whether the throw is intentional.
Code example
+ if (amount < 0) throw new ArgumentOutOfRangeException(nameof(amount));
// no test added+ if (amount < 0) throw new ArgumentOutOfRangeException(nameof(amount));
+ // tests/PaymentTests.cs
+ [Fact] public void Charge_NegativeAmount_Throws() =>
+ Assert.Throws<ArgumentOutOfRangeException>(() => svc.Charge(-1));Configuration
Disable or adjust the severity of this rule in .gauntletci.json:
{
"rules": {
"GCI0032": { "enabled": true, "severity": "Block" }
}
}See Configuration for the full schema.
Related rules
Error Handling Integrity
Detects swallowed exceptions (empty catch blocks) and exception handling patterns that hide failures from callers and operators.
Test Quality Gaps
Detects low-quality test patterns: silenced tests ([Ignore]/[Skip]), uninformative method names, and test methods missing any assertions.
Discussed in
Implemented in src/GauntletCI.Core/Rules/Implementations/GCI0032_*.cs.
Eric Cogen -- Founder, GauntletCI
Twenty years in .NET production. Most of those years, the bugs that hurt me were not the ones tests caught. They were the assumptions I did not know I was making: a removed guard clause, a renamed method that still did the old thing, a catch {} that turned a page into a silent dashboard lie. GauntletCI is the checklist I wish I had run before every commit. It runs the rules I learned the hard way, so you do not have to.
