From b566a2ec019f9ee99fce1679210cfb5ef398f44f Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:28:02 +0500 Subject: [PATCH 1/9] Refactored to FluentAssertions --- cs/HomeExercises/ObjectComparison.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 44d9aed4..33eae837 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -7,7 +7,6 @@ public class ObjectComparison { [Test] [Description("Проверка текущего царя")] - [Category("ToRefactor")] public void CheckCurrentTsar() { var actualTsar = TsarRegistry.GetCurrentTsar(); @@ -15,16 +14,15 @@ public void CheckCurrentTsar() var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70, new Person("Vasili III of Russia", 28, 170, 60, null)); - // Перепишите код на использование Fluent Assertions. - Assert.AreEqual(actualTsar.Name, expectedTsar.Name); - Assert.AreEqual(actualTsar.Age, expectedTsar.Age); - Assert.AreEqual(actualTsar.Height, expectedTsar.Height); - Assert.AreEqual(actualTsar.Weight, expectedTsar.Weight); + actualTsar.Name.Should().Be(expectedTsar.Name); + actualTsar.Age.Should().Be(expectedTsar.Age); + actualTsar.Height.Should().Be(expectedTsar.Height); + actualTsar.Weight.Should().Be(expectedTsar.Weight); - Assert.AreEqual(expectedTsar.Parent!.Name, actualTsar.Parent!.Name); - Assert.AreEqual(expectedTsar.Parent.Age, actualTsar.Parent.Age); - Assert.AreEqual(expectedTsar.Parent.Height, actualTsar.Parent.Height); - Assert.AreEqual(expectedTsar.Parent.Parent, actualTsar.Parent.Parent); + actualTsar.Parent!.Name.Should().Be(expectedTsar.Parent!.Name); + actualTsar.Parent!.Age.Should().Be(expectedTsar.Parent!.Age); + actualTsar.Parent!.Height.Should().Be(expectedTsar.Parent!.Height); + actualTsar.Parent!.Parent.Should().Be(expectedTsar.Parent!.Parent); } [Test] From 61e1b14314c1a3b7c4199579a6ee18f5b0b540bd Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Fri, 24 Nov 2023 17:30:25 +0500 Subject: [PATCH 2/9] Covered some of the cases with tests --- cs/HomeExercises/NumberValidatorTests.cs | 75 ++++++++++++++++++++---- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index a2878113..ce231fd9 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -10,24 +10,77 @@ public class NumberValidatorTests [Test] public void Test() { - Assert.Throws(() => new NumberValidator(-1, 2, true)); - Assert.DoesNotThrow(() => new NumberValidator(1, 0, true)); - Assert.Throws(() => new NumberValidator(-1, 2, false)); - Assert.DoesNotThrow(() => new NumberValidator(1, 0, true)); - - Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); - Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0")); - Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); - Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("00.00")); Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-0.00")); - Assert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); 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(17, 2, true).IsValidNumber("0.000")); Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-1.23")); Assert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("a.sd")); } + + [Test] + public void CreatesWithNoExceptions() + { + var creationOfValidator = new Action(() => { new NumberValidator(1, 0, true); }); + creationOfValidator.Should().NotThrow(); + } + + [Test] + public void ShouldThrowException_WhenNegativePrecision() + { + const int precision = -1; + var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(precision, -1, true); }); + creationOfValidatorOnlyPositive.Should().Throw($"precision = {precision} is less than 0"); + + var creationOfValidator = new Action(() => { new NumberValidator(precision, 2, false); }); + creationOfValidator.Should().Throw($"precision = {precision} is less than 0"); + } + + [Test] + public void ShouldThrowException_WhenScaleIsNegative() + { + const int scale = -1; + var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(5, scale, true); }); + creationOfValidatorOnlyPositive.Should().Throw($"scale = {scale} is less than 0"); + + var creationOfValidator = new Action(() => { new NumberValidator(5, scale, false); }); + creationOfValidator.Should().Throw($"scale = {scale} is less than 0"); + } + + [TestCase(5, 6)] + [TestCase(5, 5)] + public void ShouldThrowException_WhenScaleIsNotLessThanPrecision(int precision, int scale) + { + var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(precision, scale, true); }); + creationOfValidatorOnlyPositive.Should().Throw($"scale = {scale} is bigger or equal to precision = {precision}"); + + var creationOfValidator = new Action(() => { new NumberValidator(precision, scale, false); }); + creationOfValidator.Should().Throw($"scale = {scale} is bigger or equal to precision = {precision}"); + } + + [TestCase("12.34", true)] + [TestCase("12", true)] + [TestCase("1.000", false)] + [TestCase("123.000", false)] + public void ShouldValidateNumbersWithoutSign(string inputValue, bool expected) + { + var validator = new NumberValidator(5, 2, true); + validator.IsValidNumber(inputValue).Should().Be(expected, $"number {inputValue} is {(expected ? "correct" : "incorrect")}"); + } + + [Test] + public void ShouldNotValidateNull() + { + var validator = new NumberValidator(5, 2, true); + validator.IsValidNumber(null!).Should().Be(false, "null should be false"); + } + + [Test] + public void ShouldNotValidateEmpty() + { + var validator = new NumberValidator(5, 2, true); + validator.IsValidNumber("").Should().Be(false, "empty should be false"); + } } public class NumberValidator From f7c896352557f093c80afeddd0c6920de072a4b4 Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:26:05 +0500 Subject: [PATCH 3/9] Refactored with correct usage of FluentAssertions --- cs/HomeExercises/ObjectComparison.cs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 33eae837..73ee9cd5 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -1,4 +1,5 @@ using FluentAssertions; +using FluentAssertions.Equivalency; using NUnit.Framework; namespace HomeExercises @@ -14,15 +15,9 @@ public void CheckCurrentTsar() var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70, new Person("Vasili III of Russia", 28, 170, 60, null)); - actualTsar.Name.Should().Be(expectedTsar.Name); - actualTsar.Age.Should().Be(expectedTsar.Age); - actualTsar.Height.Should().Be(expectedTsar.Height); - actualTsar.Weight.Should().Be(expectedTsar.Weight); - - actualTsar.Parent!.Name.Should().Be(expectedTsar.Parent!.Name); - actualTsar.Parent!.Age.Should().Be(expectedTsar.Parent!.Age); - actualTsar.Parent!.Height.Should().Be(expectedTsar.Parent!.Height); - actualTsar.Parent!.Parent.Should().Be(expectedTsar.Parent!.Parent); + actualTsar.Should().BeEquivalentTo(expectedTsar, options => options + .IncludingFields() + .Excluding(info => info.SelectedMemberPath.EndsWith("Id"))); } [Test] @@ -34,6 +29,15 @@ public void CheckCurrentTsar_WithCustomEquality() new Person("Vasili III of Russia", 28, 170, 60, null)); // Какие недостатки у такого подхода? + /* + * Недостатками такого подхода являются: + * 1. Если тест падает то единственное, что можно из этого понять, что цари не одинаковые + * Никакой информации об их различиях он не выводит + * 2. Из названия теста тоже никак не получится понять что именно тестируется + * 3. При любом расширении класса Person придется дописывать/переписывать компаратор + * 4. Еще ужаснее будет если нововведение в Person будет необязательным и нам придется + * В компараторе поддерживать это опциональное сравнение, а учитывая еще и первый пункт... + */ Assert.True(AreEqual(actualTsar, expectedTsar)); } From 28eda6940d3853ea6042079bef6f4c084cc0c98a Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Sun, 26 Nov 2023 17:30:08 +0500 Subject: [PATCH 4/9] Removed unnecessary tests added new ones --- cs/HomeExercises/NumberValidatorTests.cs | 97 +++++++++++++----------- 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index ce231fd9..58496c9a 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -8,78 +8,89 @@ namespace HomeExercises public class NumberValidatorTests { [Test] - public void Test() + public void CreatesWithNoExceptions() { - Assert.IsFalse(new NumberValidator(3, 2, true).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")); + var creationOfValidator = new Action(() => { new NumberValidator(2, 1, true); }); + creationOfValidator.Should().NotThrow(); } - [Test] - public void CreatesWithNoExceptions() + [TestCase(-1, 2, false, TestName = "Precision < 0")] + [TestCase(3, -1, false, TestName = "Scale < 0")] + [TestCase(3, 4, false, TestName = "Precision < Scale")] + public void ShouldThrowException_WhenInitWithIncorrectData(int precision, int scale, bool onlyPositive) { - var creationOfValidator = new Action(() => { new NumberValidator(1, 0, true); }); - creationOfValidator.Should().NotThrow(); + var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(precision, scale, onlyPositive); }); + creationOfValidatorOnlyPositive.Should().Throw(); } [Test] - public void ShouldThrowException_WhenNegativePrecision() + public void ShouldNotValidate_Null() { - const int precision = -1; - var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(precision, -1, true); }); - creationOfValidatorOnlyPositive.Should().Throw($"precision = {precision} is less than 0"); - - var creationOfValidator = new Action(() => { new NumberValidator(precision, 2, false); }); - creationOfValidator.Should().Throw($"precision = {precision} is less than 0"); + string number = null!; + var validator = new NumberValidator(5, 2); + validator.IsValidNumber(number).Should().BeFalse("null should be false"); } [Test] - public void ShouldThrowException_WhenScaleIsNegative() + public void ShouldNotValidate_Empty() { - const int scale = -1; - var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(5, scale, true); }); - creationOfValidatorOnlyPositive.Should().Throw($"scale = {scale} is less than 0"); - - var creationOfValidator = new Action(() => { new NumberValidator(5, scale, false); }); - creationOfValidator.Should().Throw($"scale = {scale} is less than 0"); + const string number = ""; + var validator = new NumberValidator(5, 2); + validator.IsValidNumber(number).Should().BeFalse("empty should be false"); } - [TestCase(5, 6)] - [TestCase(5, 5)] - public void ShouldThrowException_WhenScaleIsNotLessThanPrecision(int precision, int scale) + [Test] + public void ShouldNotValidate_NonNumeric() { - var creationOfValidatorOnlyPositive = new Action(() => { new NumberValidator(precision, scale, true); }); - creationOfValidatorOnlyPositive.Should().Throw($"scale = {scale} is bigger or equal to precision = {precision}"); - - var creationOfValidator = new Action(() => { new NumberValidator(precision, scale, false); }); - creationOfValidator.Should().Throw($"scale = {scale} is bigger or equal to precision = {precision}"); + const string notNumber = "a.bc"; + var validator = new NumberValidator(5, 2); + validator.IsValidNumber(notNumber).Should().BeFalse($"{notNumber} is not a number"); } [TestCase("12.34", true)] [TestCase("12", true)] [TestCase("1.000", false)] [TestCase("123.000", false)] - public void ShouldValidateNumbersWithoutSign(string inputValue, bool expected) + public void ShouldValidate_NumbersWithoutSign(string inputValue, bool expected) { var validator = new NumberValidator(5, 2, true); validator.IsValidNumber(inputValue).Should().Be(expected, $"number {inputValue} is {(expected ? "correct" : "incorrect")}"); } - [Test] - public void ShouldNotValidateNull() + [TestCase("+1.23", true)] + [TestCase("+1", true)] + [TestCase("+0.5", true)] + [TestCase("+0.567", false)] + [TestCase("+123.45", false)] + public void ShouldValidate_NumbersWithPositiveSign(string inputValue, bool expected) { var validator = new NumberValidator(5, 2, true); - validator.IsValidNumber(null!).Should().Be(false, "null should be false"); - } - - [Test] - public void ShouldNotValidateEmpty() + validator.IsValidNumber(inputValue).Should().Be(expected, $"number {inputValue} is {(expected ? "correct" : "incorrect")}"); + } + + [TestCase("-1.23", true)] + [TestCase("-1", true)] + [TestCase("-0.5", true)] + [TestCase("-0.567", false)] + [TestCase("-123.45", false)] + public void ShouldValidate_NumbersWithNegativeSign(string inputValue, bool expected) { - var validator = new NumberValidator(5, 2, true); - validator.IsValidNumber("").Should().Be(false, "empty should be false"); + var positiveValidator = new NumberValidator(5, 2, true); + positiveValidator.IsValidNumber(inputValue).Should().Be(false, "only positive validator should not validate negatives"); + + var validator = new NumberValidator(5, 2); + validator.IsValidNumber(inputValue).Should().Be(expected, $"number {inputValue} is {(expected ? "correct" : "incorrect")}"); + } + + [TestCase("1,23", true)] + [TestCase("+1,23", true)] + [TestCase("-1,23", true)] + [TestCase("-123,45", false)] + [TestCase("0,456", false)] + public void ShouldValidate_DifferentDelimiter(string inputValue, bool expected) + { + var validator = new NumberValidator(5, 2); + validator.IsValidNumber(inputValue).Should().Be(expected, $"{expected} should validate comma"); } } From 74daaf939b32e51b47671661168149e2359b9619 Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Mon, 27 Nov 2023 13:28:09 +0500 Subject: [PATCH 5/9] Refactored so it's easier to catch compile-error --- cs/HomeExercises/ObjectComparison.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 73ee9cd5..88e4d258 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -17,7 +17,7 @@ public void CheckCurrentTsar() actualTsar.Should().BeEquivalentTo(expectedTsar, options => options .IncludingFields() - .Excluding(info => info.SelectedMemberPath.EndsWith("Id"))); + .Excluding(info => info.SelectedMemberInfo.Name == nameof(Person.Id))); } [Test] From b8a3096ad69a41690b9741bb41655e3726d3e466 Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Mon, 27 Nov 2023 13:30:03 +0500 Subject: [PATCH 6/9] More tests --- cs/HomeExercises/NumberValidatorTests.cs | 38 +++++++++++++----------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index 58496c9a..abc5b8a7 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -10,7 +10,10 @@ public class NumberValidatorTests [Test] public void CreatesWithNoExceptions() { - var creationOfValidator = new Action(() => { new NumberValidator(2, 1, true); }); + var creationOfPositiveValidator = new Action(() => { new NumberValidator(2, 1, true); }); + creationOfPositiveValidator.Should().NotThrow(); + + var creationOfValidator = new Action(() => { new NumberValidator(2, 1, false); }); creationOfValidator.Should().NotThrow(); } @@ -23,26 +26,25 @@ public void ShouldThrowException_WhenInitWithIncorrectData(int precision, int sc creationOfValidatorOnlyPositive.Should().Throw(); } - [Test] - public void ShouldNotValidate_Null() - { - string number = null!; - var validator = new NumberValidator(5, 2); - validator.IsValidNumber(number).Should().BeFalse("null should be false"); - } - - [Test] - public void ShouldNotValidate_Empty() + [TestCase(null!, TestName = "Number is null")] + [TestCase("", TestName = "Number is \"\"")] + [TestCase(" ", TestName = "Number is \" \"")] + [TestCase("\n", TestName = "Number is \"\\n\"")] + public void ShouldNotValidate_NonCorrectData(string number) { - const string number = ""; var validator = new NumberValidator(5, 2); - validator.IsValidNumber(number).Should().BeFalse("empty should be false"); + validator.IsValidNumber(number).Should().BeFalse($"{number} is not correct data"); } - [Test] - public void ShouldNotValidate_NonNumeric() + [TestCase("abc")] + [TestCase("a.bc")] + [TestCase(".2")] + [TestCase("1.2,3")] + [TestCase(",")] + [TestCase("-.2")] + [TestCase("-1;2")] + public void ShouldNotValidate_NonNumeric(string notNumber) { - const string notNumber = "a.bc"; var validator = new NumberValidator(5, 2); validator.IsValidNumber(notNumber).Should().BeFalse($"{notNumber} is not a number"); } @@ -50,7 +52,7 @@ public void ShouldNotValidate_NonNumeric() [TestCase("12.34", true)] [TestCase("12", true)] [TestCase("1.000", false)] - [TestCase("123.000", false)] + [TestCase("1234.00", false)] public void ShouldValidate_NumbersWithoutSign(string inputValue, bool expected) { var validator = new NumberValidator(5, 2, true); @@ -90,7 +92,7 @@ public void ShouldValidate_NumbersWithNegativeSign(string inputValue, bool expec public void ShouldValidate_DifferentDelimiter(string inputValue, bool expected) { var validator = new NumberValidator(5, 2); - validator.IsValidNumber(inputValue).Should().Be(expected, $"{expected} should validate comma"); + validator.IsValidNumber(inputValue).Should().Be(expected, $"{inputValue} should validate comma"); } } From ceaf19d1976cea5307e0cd995ea7d99779fea37a Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Mon, 27 Nov 2023 15:11:32 +0500 Subject: [PATCH 7/9] Now ignores Id field only of Person class --- cs/HomeExercises/ObjectComparison.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 88e4d258..9f3bb237 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -17,7 +17,8 @@ public void CheckCurrentTsar() actualTsar.Should().BeEquivalentTo(expectedTsar, options => options .IncludingFields() - .Excluding(info => info.SelectedMemberInfo.Name == nameof(Person.Id))); + .Excluding(info => info.SelectedMemberInfo.Name == nameof(Person.Id) + && info.SelectedMemberInfo.DeclaringType == typeof(Person))); } [Test] From 4a1dc18f9b9d705daebccae3c8f2af3edcb8489e Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Mon, 27 Nov 2023 15:16:16 +0500 Subject: [PATCH 8/9] Refactored using Values attr --- cs/HomeExercises/NumberValidatorTests.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index abc5b8a7..3e884fb5 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -8,13 +8,10 @@ namespace HomeExercises public class NumberValidatorTests { [Test] - public void CreatesWithNoExceptions() + public void CreatesWithNoExceptions([Values(2)] int precision, [Values(1)] int scale, [Values(true, false)] bool onlyPositive) { - var creationOfPositiveValidator = new Action(() => { new NumberValidator(2, 1, true); }); + var creationOfPositiveValidator = new Action(() => { new NumberValidator(precision, scale, onlyPositive); }); creationOfPositiveValidator.Should().NotThrow(); - - var creationOfValidator = new Action(() => { new NumberValidator(2, 1, false); }); - creationOfValidator.Should().NotThrow(); } [TestCase(-1, 2, false, TestName = "Precision < 0")] From 5350b03cbe9df4bca159e5296a364a551f681a34 Mon Sep 17 00:00:00 2001 From: Kholstinin Yegor <99079920+Yrwlcm@users.noreply.github.com> Date: Mon, 27 Nov 2023 15:47:21 +0500 Subject: [PATCH 9/9] Removed unnecessary attributes --- cs/HomeExercises/NumberValidatorTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index 3e884fb5..276d1833 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -8,9 +8,9 @@ namespace HomeExercises public class NumberValidatorTests { [Test] - public void CreatesWithNoExceptions([Values(2)] int precision, [Values(1)] int scale, [Values(true, false)] bool onlyPositive) + public void CreatesWithNoExceptions([Values] bool onlyPositive) { - var creationOfPositiveValidator = new Action(() => { new NumberValidator(precision, scale, onlyPositive); }); + var creationOfPositiveValidator = new Action(() => { new NumberValidator(2, 1, onlyPositive); }); creationOfPositiveValidator.Should().NotThrow(); }