From d8cae3a2a9c3992ffdbee6d725076441ff83e25c Mon Sep 17 00:00:00 2001 From: easyThingsLover Date: Tue, 28 Oct 2025 15:25:28 +0500 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=A1=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=8A=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D0=B2=20=D0=B8=20=D0=A0=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2(=D0=9C=D0=B5=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=9C=D0=B0=D1=82=D0=B2=D0=B5=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1. ObjectComparison/ObjectComparison.cs | 34 +++++++++----- .../NumberValidatorTests.cs | 44 ++++++++++++++++--- 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs index d544c47..f3f8939 100644 --- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs +++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs @@ -1,4 +1,6 @@ -using NUnit.Framework; +using FluentAssertions; +using NUnit.Framework; +using NUnit.Framework.Constraints; using NUnit.Framework.Legacy; namespace HomeExercise.Tasks.ObjectComparison; @@ -15,15 +17,23 @@ public void CheckCurrentTsar() new Person("Vasili III of Russia", 28, 170, 60, null)); // Перепишите код на использование Fluent Assertions. - ClassicAssert.AreEqual(actualTsar.Name, expectedTsar.Name); - ClassicAssert.AreEqual(actualTsar.Age, expectedTsar.Age); - ClassicAssert.AreEqual(actualTsar.Height, expectedTsar.Height); - ClassicAssert.AreEqual(actualTsar.Weight, expectedTsar.Weight); - - ClassicAssert.AreEqual(expectedTsar.Parent!.Name, actualTsar.Parent!.Name); - ClassicAssert.AreEqual(expectedTsar.Parent.Age, actualTsar.Parent.Age); - ClassicAssert.AreEqual(expectedTsar.Parent.Height, actualTsar.Parent.Height); - ClassicAssert.AreEqual(expectedTsar.Parent.Parent, actualTsar.Parent.Parent); + // ClassicAssert.AreEqual(actualTsar.Name, expectedTsar.Name); + // ClassicAssert.AreEqual(actualTsar.Age, expectedTsar.Age); + // ClassicAssert.AreEqual(actualTsar.Height, expectedTsar.Height); + // ClassicAssert.AreEqual(actualTsar.Weight, expectedTsar.Weight); + expectedTsar.Should().BeEquivalentTo(actualTsar, options => options + .Excluding(p => p.Id) + .Excluding(p => p.Parent)); + + + //ClassicAssert.AreEqual(expectedTsar.Parent!.Name, actualTsar.Parent!.Name); + // ClassicAssert.AreEqual(expectedTsar.Parent.Age, actualTsar.Parent.Age); + // ClassicAssert.AreEqual(expectedTsar.Parent.Height, actualTsar.Parent.Height); + // ClassicAssert.AreEqual(expectedTsar.Parent.Parent, actualTsar.Parent.Parent); + + expectedTsar.Parent.Should().BeEquivalentTo(actualTsar.Parent, options => options + .Excluding(p => p.Id) + .Excluding(p => p.Weight)); } [Test] @@ -34,7 +44,9 @@ public void CheckCurrentTsar_WithCustomEquality() var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70, new Person("Vasili III of Russia", 28, 170, 60, null)); - // Какие недостатки у такого подхода? + // Какие недостатки у такого подхода? + //При добавлении свойств в класс Person этот тест перестанет корректно работать, его придется дописывать, + //а тест FluentAssertions придется дописывать, только если добавленное поле не должно учавствовать в сравнении ClassicAssert.True(AreEqual(actualTsar, expectedTsar)); } diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs index 950c9bc..4545050 100644 --- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs +++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs @@ -1,4 +1,6 @@  +using FluentAssertions; +using FluentAssertions.Execution; using NUnit.Framework; using NUnit.Framework.Legacy; @@ -10,22 +12,50 @@ public class NumberValidatorTests [Test] public void Test() { - Assert.Throws(() => new NumberValidator(-1, 2, true)); + + /*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)); ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0")); - ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("00.00")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-0.00")); - ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("+0.00")); ClassicAssert.IsTrue(new NumberValidator(4, 2, true).IsValidNumber("+1.23")); ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("+1.23")); ClassicAssert.IsFalse(new NumberValidator(17, 2, true).IsValidNumber("0.000")); ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-1.23")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("a.sd")); + ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("a.sd"));*/ + using (new AssertionScope()) + { + var precisionBelowZeroValidator = () => new NumberValidator(-1, 2, true); + var scaleBelowZeroValidator = () => new NumberValidator(1, -1, true); + var scaleGreaterThanPrecisionValidator = () => new NumberValidator(1, 3, true); + + precisionBelowZeroValidator.Should().Throw(); + scaleBelowZeroValidator.Should().Throw(); + scaleGreaterThanPrecisionValidator.Should().Throw(); + + var limitedScaleValidator = new NumberValidator(17, 2, true); + var limitedPrecisionValidator = new NumberValidator(3, 2, true); + var normalizedNumberValidator = new NumberValidator(4, 2, true); + var notOnlyPositiveValidator = new NumberValidator(4, 2, false); + + limitedScaleValidator.IsValidNumber("0.0").Should().BeTrue(); + limitedScaleValidator.IsValidNumber("0.000").Should().BeFalse(); + limitedScaleValidator.IsValidNumber("0").Should().BeTrue(); + limitedPrecisionValidator.IsValidNumber("00.00").Should().BeFalse(); + limitedPrecisionValidator.IsValidNumber("+1.23").Should().BeFalse(); + limitedPrecisionValidator.IsValidNumber("-1.23").Should().BeFalse(); + limitedPrecisionValidator.IsValidNumber("123").Should().BeTrue(); + limitedPrecisionValidator.IsValidNumber("123.").Should().BeFalse(); + normalizedNumberValidator.IsValidNumber("+1.23").Should().BeTrue(); + normalizedNumberValidator.IsValidNumber("a.sd").Should().BeFalse(); + normalizedNumberValidator.IsValidNumber("-1.23").Should().BeFalse(); + normalizedNumberValidator.IsValidNumber("00,00").Should().BeTrue(); + normalizedNumberValidator.IsValidNumber("1.2.3").Should().BeFalse(); + normalizedNumberValidator.IsValidNumber("").Should().BeFalse(); + notOnlyPositiveValidator.IsValidNumber("-1.23").Should().BeTrue(); + + } } } \ No newline at end of file From f02dc6390b6caa0dd1a091a9600526a2bfac485e Mon Sep 17 00:00:00 2001 From: easyThingsLover Date: Wed, 29 Oct 2025 12:22:22 +0500 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D1=80=D0=BE=D0=BF=D0=BD=D1=83=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D1=8B,=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=8B=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=20=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BA=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D1=8B,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1. ObjectComparison/ObjectComparison.cs | 13 +-- .../NumberValidatorTests.cs | 86 +++++++++---------- 2 files changed, 40 insertions(+), 59 deletions(-) diff --git a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs index f3f8939..99c8bb6 100644 --- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs +++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs @@ -15,21 +15,10 @@ 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. - // ClassicAssert.AreEqual(actualTsar.Name, expectedTsar.Name); - // ClassicAssert.AreEqual(actualTsar.Age, expectedTsar.Age); - // ClassicAssert.AreEqual(actualTsar.Height, expectedTsar.Height); - // ClassicAssert.AreEqual(actualTsar.Weight, expectedTsar.Weight); + expectedTsar.Should().BeEquivalentTo(actualTsar, options => options .Excluding(p => p.Id) .Excluding(p => p.Parent)); - - - //ClassicAssert.AreEqual(expectedTsar.Parent!.Name, actualTsar.Parent!.Name); - // ClassicAssert.AreEqual(expectedTsar.Parent.Age, actualTsar.Parent.Age); - // ClassicAssert.AreEqual(expectedTsar.Parent.Height, actualTsar.Parent.Height); - // ClassicAssert.AreEqual(expectedTsar.Parent.Parent, actualTsar.Parent.Parent); expectedTsar.Parent.Should().BeEquivalentTo(actualTsar.Parent, options => options .Excluding(p => p.Id) diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs index 4545050..baac23d 100644 --- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs +++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs @@ -9,53 +9,45 @@ namespace HomeExercise.Tasks.NumberValidator; [TestFixture] public class NumberValidatorTests { - [Test] - public void Test() + [TestCase(-1, 2, true)] + [TestCase(0, 2, true)] + [TestCase(1, -1, true)] + [TestCase(1, 3, true)] + [TestCase(1, 1, true)] + public void Constructor_ThrowArgumentException_WhenParametersInvalid(int precision, 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)); - - ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); - ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("00.00")); - ClassicAssert.IsTrue(new NumberValidator(4, 2, true).IsValidNumber("+1.23")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("+1.23")); - ClassicAssert.IsFalse(new NumberValidator(17, 2, true).IsValidNumber("0.000")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-1.23")); - ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("a.sd"));*/ - using (new AssertionScope()) - { - var precisionBelowZeroValidator = () => new NumberValidator(-1, 2, true); - var scaleBelowZeroValidator = () => new NumberValidator(1, -1, true); - var scaleGreaterThanPrecisionValidator = () => new NumberValidator(1, 3, true); - - precisionBelowZeroValidator.Should().Throw(); - scaleBelowZeroValidator.Should().Throw(); - scaleGreaterThanPrecisionValidator.Should().Throw(); - - var limitedScaleValidator = new NumberValidator(17, 2, true); - var limitedPrecisionValidator = new NumberValidator(3, 2, true); - var normalizedNumberValidator = new NumberValidator(4, 2, true); - var notOnlyPositiveValidator = new NumberValidator(4, 2, false); - - limitedScaleValidator.IsValidNumber("0.0").Should().BeTrue(); - limitedScaleValidator.IsValidNumber("0.000").Should().BeFalse(); - limitedScaleValidator.IsValidNumber("0").Should().BeTrue(); - limitedPrecisionValidator.IsValidNumber("00.00").Should().BeFalse(); - limitedPrecisionValidator.IsValidNumber("+1.23").Should().BeFalse(); - limitedPrecisionValidator.IsValidNumber("-1.23").Should().BeFalse(); - limitedPrecisionValidator.IsValidNumber("123").Should().BeTrue(); - limitedPrecisionValidator.IsValidNumber("123.").Should().BeFalse(); - normalizedNumberValidator.IsValidNumber("+1.23").Should().BeTrue(); - normalizedNumberValidator.IsValidNumber("a.sd").Should().BeFalse(); - normalizedNumberValidator.IsValidNumber("-1.23").Should().BeFalse(); - normalizedNumberValidator.IsValidNumber("00,00").Should().BeTrue(); - normalizedNumberValidator.IsValidNumber("1.2.3").Should().BeFalse(); - normalizedNumberValidator.IsValidNumber("").Should().BeFalse(); - notOnlyPositiveValidator.IsValidNumber("-1.23").Should().BeTrue(); - - } + var numberValidatorConstructor = () => new NumberValidator(precision, scale, onlyPositive); + numberValidatorConstructor.Should().Throw(); + } + + [TestCase(1, 0, true)] + [TestCase(2, 1, true)] + public void Constructor_NotThrowArgumentException_WhenParametersValid(int precision, int scale, bool onlyPositive) + { + var numberValidatorConstructor = () => new NumberValidator(precision, scale, onlyPositive); + numberValidatorConstructor.Should().NotThrow(); + } + + [TestCase(17, 2, true, "0.0", true)] + [TestCase(17, 2, true, "0.000", false)] + [TestCase(17, 2, true, "0", true)] + [TestCase(3, 2, true, "00.00", false)] + [TestCase(3, 2, true, "+1.23", false)] + [TestCase(3, 2, true, "-1.23", false)] + [TestCase(3, 2, true, "123", true)] + [TestCase(3, 2, true, "123.", false)] + [TestCase(4, 2, true, "+1.23", true)] + [TestCase(4, 2, true, "a.sd", false)] + [TestCase(4, 2, true, "-1.23", false)] + [TestCase(4, 2, true, "00,00", true)] + [TestCase(4, 2, true, "1.2.3", false)] + [TestCase(4, 2, true, ".0", false)] + [TestCase(4, 2, true, "", false)] + [TestCase(4, 2, true, " ", false)] + [TestCase(4, 2, false, "-1.23", true)] + [TestCase(4, 2, false, null, false)] + public void IsValidNumber_ReturnExpectedResult(int precision, int scale, bool onlyPositive, string input, bool expected) + { + new NumberValidator(precision, scale, onlyPositive).IsValidNumber(input).Should().Be(expected); } } \ No newline at end of file