C# NUnit: Test-Refactoring
Aug 23, 2017 · 1 min read
Stumbled upon this test:
Assert.Throws<ArgumentException>(() => new NumberValidator(-1, 2, true));
Assert.Throws<ArgumentException>(() => new NumberValidator(1, -1, true));
Assert.DoesNotThrow(() => new NumberValidator(1, 0, true)); Assert.Throws<ArgumentException>(() => new NumberValidator(-1, 2, false));
Assert.Throws<ArgumentException>(() => new NumberValidator(1, -1, false));
Assert.DoesNotThrow(() => new NumberValidator(1, 0, true));
Assert.IsFalse(new NumberValidator(17, 2, true).IsValidNumber(null));
Assert.IsFalse(new NumberValidator(17, 2, true).IsValidNumber("")); Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0")); Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0"));
Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.00"));
Assert.IsFalse(new NumberValidator(17, 2, true).IsValidNumber("0.000"));
Assert.IsTrue(new NumberValidator(3, 2, true).IsValidNumber("0.00"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("00.00"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-0.00"));
Assert.IsFalse(new NumberValidator(3, 2, false).IsValidNumber("-0.00"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("+0.00"));
Assert.IsTrue(new NumberValidator(4, 2, true).IsValidNumber("+1.23"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("+1.23"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-1.23"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("a.sd"));
Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("asd"));And made me etchy. This is one test with 22 assertion which violates several ‘golden rules of testing’, according to which test should:
- have an AAA (arrange, act, assert) structure,
- be DRY (don’t repeat yourself) — KISS (Keep it simple&stupid),
- act as specification,
- have clear name and/or description.
So, I separated assertion according to their purpose, gave then names and description (to some of them).
And this is how it looks like now:
With peace in my heart I went on my business.
Thanks for reading!
