Test Quality Gaps
Detects low-quality test patterns: silenced tests ([Ignore]/[Skip]), uninformative method names, and test methods missing any assertions.
Why this rule exists
A test with no assertions is theater: it runs, it passes, it proves nothing. A silenced test that never gets unsilenced is dead code that signals false coverage.
Code example
+ [Fact] public void Test1() { var x = svc.DoThing(); }+ [Fact] public void DoThing_WithValidInput_ReturnsExpectedResult()
+ {
+ var result = svc.DoThing("input");
+ Assert.Equal("expected", result);
+ }Configuration
Disable or adjust the severity of this rule in .gauntletci.json:
{
"rules": {
"GCI0041": { "enabled": true, "severity": "Warn" }
}
}See Configuration for the full schema.
Related rules
Uncaught Exception Path
Fires when throw new is added without a corresponding Assert.Throws or Should().Throw assertion in the test suite.
TODO and Stub Detection
Fires when added lines in non-test files contain TODO, FIXME, HACK markers, or throw new NotImplementedException, indicating unfinished work.
Discussed in
Implemented in src/GauntletCI.Core/Rules/Implementations/GCI0041_*.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.
