diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index a2878113..c9172a4f 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -7,27 +7,44 @@ namespace HomeExercises { public class NumberValidatorTests { - [Test] - public void Test() + [TestCase(-1, 2, true)] + [TestCase(10, -2, true)] + [TestCase(10, 10, true)] + [TestCase(10, 11, true)] + public void ThrowsIfNotValid(int prescision, int scale, bool onlyPositive) { - 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.Throws(() => new NumberValidator(prescision, scale, onlyPositive)); + } + + [TestCase(1, 0, true)] + public void DoesNotThrows(int prescision, int scale, bool onlyPositive) + { + Assert.DoesNotThrow(() => new NumberValidator(prescision, scale, onlyPositive)); + } + + [TestCase(3, 2, true, "00.00")] + [TestCase(3, 2, true, "-0.00")] + [TestCase(3, 2, true, "+1.23")] + [TestCase(17, 2, true, "0.000")] + [TestCase(3, 2, true, "a.sd")] + [TestCase(10, 2, true, "-0.00")] + [TestCase(10, 2, true, "")] + public void NotValidNumber(int prescision, int scale, bool onlyPositive, string value) + { + Assert.IsFalse(new NumberValidator(prescision, scale, onlyPositive).IsValidNumber(value)); + } - 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")); + [TestCase(17, 2, true, "0.0")] + [TestCase(17, 2, true, "0")] + [TestCase(4, 2, true, "+1.23")] + [TestCase(10, 2, false, "-0.00")] + [TestCase(10, 2, false, "0.00")] + [TestCase(10, 2, false, "0,00")] + public void ValidNumber(int prescision, int scale, bool onlyPositive, string value) + { + Assert.IsTrue(new NumberValidator(prescision, scale, onlyPositive).IsValidNumber(value)); } + } public class NumberValidator diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 44d9aed4..9e16548f 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -16,15 +16,14 @@ public void CheckCurrentTsar() 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); - 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); + expectedTsar.Should().BeEquivalentTo(actualTsar, options => + options.Excluding(o => o.Parent!.Id) + .Excluding(o => o.Id)); + + actualTsar.Parent.Should().BeEquivalentTo(expectedTsar.Parent, options => + options.Excluding(o => o!.Parent!.Id) + .Excluding(o => o!.Id)); } [Test] @@ -36,6 +35,7 @@ public void CheckCurrentTsar_WithCustomEquality() new Person("Vasili III of Russia", 28, 170, 60, null)); // Какие недостатки у такого подхода? + //Код нерасширяем, потому что если в классе Person появятся новые поля, они не будут учитываться в этом методе Assert.True(AreEqual(actualTsar, expectedTsar)); }