From 493004cdb16e8cb9e7a184dd4290198c2e88d143 Mon Sep 17 00:00:00 2001 From: crycrash Date: Tue, 5 Nov 2024 15:23:08 +0500 Subject: [PATCH 1/3] Homework first --- .gitignore | 1 + .../1. ObjectComparison/ObjectComparison.cs | 24 +++++---- .../NumberValidatorTests.cs | 54 ++++++++++++------- 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index 03c9b93..ca5a943 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ bin/ obj/ .vs/ +.DS_Store \ No newline at end of file diff --git a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs index d544c47..e9b7981 100644 --- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs +++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using NUnit.Framework.Legacy; +using FluentAssertions; namespace HomeExercise.Tasks.ObjectComparison; public class ObjectComparison @@ -13,17 +14,14 @@ 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); - - 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); + actualTsar.Should().BeEquivalentTo(expectedTsar, options => options + .IncludingNestedObjects() + .Excluding(p => p.Id) + .Excluding(p => p.Parent.Id)); + //+Проверяет все поля класса на эквивалентность + //+При добавлении нового поля в класс проверка будет автоматически включена + //+Уменьшено количество кода + //+Удобный вывод при непрохождении теста(показаны несовпадающие поля) } [Test] @@ -36,6 +34,10 @@ public void CheckCurrentTsar_WithCustomEquality() // Какие недостатки у такого подхода? ClassicAssert.True(AreEqual(actualTsar, expectedTsar)); + + //-При появлении новых полей придется переписывать тест + //-Функция возвращает bool, что не информативно + //-Для того чтобы узнать различия между царями придется дебажить и проверять каждое условие } private bool AreEqual(Person? actual, Person? expected) diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs index 950c9bc..1b9caa8 100644 --- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs +++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs @@ -1,6 +1,7 @@ - -using NUnit.Framework; +using NUnit.Framework; using NUnit.Framework.Legacy; +using FluentAssertions; +using FluentAssertions.Execution; namespace HomeExercise.Tasks.NumberValidator; @@ -10,22 +11,39 @@ 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)); + using (new AssertionScope()) //Позволяет выполнить все проверки даже если какая-то упала + //Информация об ошибках выдастся по заверщению всех тестов + { + Action act = () => new NumberValidator(5, 2, true); + act.Should().NotThrow(because: "Целая и дробная часть больше нуля, цифры целой части больше чем в дробной"); - 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")); + act = () => new NumberValidator(-1, 2, true); + act.Should().Throw(because: "Целая часть меньше нуля"); + + act = () => new NumberValidator(1, -1, true); + act.Should().Throw(because: "Дробная часть меньше нуля"); + + act = () => new NumberValidator(1, 1, false); + act.Should().Throw(because: "Дробная часть равна целой части"); + //Тесты для проверки корректности инициализации + + NumberValidator numberForCheck = new NumberValidator(4, 2, true); + numberForCheck.IsValidNumber("").Should().BeFalse(); + numberForCheck.IsValidNumber("a.sd").Should().BeFalse(); + //Тесты для проверки данных не подходящих под регулярку + + numberForCheck.IsValidNumber("0.0").Should().BeTrue(); + numberForCheck.IsValidNumber("0").Should().BeTrue(); + numberForCheck.IsValidNumber("+1.23").Should().BeTrue(); + numberForCheck = new NumberValidator(4, 2, false); + numberForCheck.IsValidNumber("-1.23").Should().BeTrue(); + //Тесты для проверки "нормальных" и пороговых значений + + numberForCheck = new NumberValidator(3, 2, true); + numberForCheck.IsValidNumber("00.00").Should().BeFalse(); + numberForCheck.IsValidNumber("-0.0").Should().BeFalse(); + numberForCheck.IsValidNumber("+0.00").Should().BeFalse(); + //Тесты для проверки неподходящих по условию значений + } } } \ No newline at end of file From b79735e1e309443e63a4708f167949e98a9f77f0 Mon Sep 17 00:00:00 2001 From: crycrash Date: Tue, 5 Nov 2024 20:35:44 +0500 Subject: [PATCH 2/3] Homework fixed --- .../1. ObjectComparison/ObjectComparison.cs | 6 +++-- .../NumberValidatorTests.cs | 24 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs index e9b7981..181190e 100644 --- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs +++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs @@ -16,8 +16,7 @@ public void CheckCurrentTsar() new Person("Vasili III of Russia", 28, 170, 60, null)); actualTsar.Should().BeEquivalentTo(expectedTsar, options => options .IncludingNestedObjects() - .Excluding(p => p.Id) - .Excluding(p => p.Parent.Id)); + .Excluding(p => p.Path.Contains("Id"))); //+Проверяет все поля класса на эквивалентность //+При добавлении нового поля в класс проверка будет автоматически включена //+Уменьшено количество кода @@ -38,6 +37,9 @@ public void CheckCurrentTsar_WithCustomEquality() //-При появлении новых полей придется переписывать тест //-Функция возвращает bool, что не информативно //-Для того чтобы узнать различия между царями придется дебажить и проверять каждое условие + //-Используется рекурсивный подход без явно заданного ограничения на рекурсию + //-В IncludingNestedObjects макс глубина рекурсии по умолчанию 10 + //-Что не даст уйти сильно в дебри } private bool AreEqual(Person? actual, Person? expected) diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs index 1b9caa8..9ef669d 100644 --- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs +++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs @@ -28,21 +28,35 @@ public void Test() //Тесты для проверки корректности инициализации NumberValidator numberForCheck = new NumberValidator(4, 2, true); - numberForCheck.IsValidNumber("").Should().BeFalse(); - numberForCheck.IsValidNumber("a.sd").Should().BeFalse(); + + numberForCheck.IsValidNumber("").Should().BeFalse(because: "Ввод пуст"); + numberForCheck.IsValidNumber(null).Should().BeFalse(because: "Ввод пуст"); + + numberForCheck.IsValidNumber("a.sd").Should().BeFalse(because: "Используются не арабские цифры"); + numberForCheck.IsValidNumber("సున్న.నాలుగు").Should().BeFalse(because: "Используются не арабские цифры"); + numberForCheck.IsValidNumber("IV.III").Should().BeFalse(because: "Используются не арабские цифры"); + numberForCheck.IsValidNumber("девять.ноль").Should().BeFalse(because: "Используются не арабские цифры"); + + numberForCheck.IsValidNumber("9dot8").Should().BeFalse(because: "Некорректный разделитель"); + numberForCheck.IsValidNumber("3..2").Should().BeFalse(because: "Некорректный разделитель"); + numberForCheck.IsValidNumber("1/2").Should().BeFalse(because: "Некорректный разделитель"); + + numberForCheck.IsValidNumber("plus9").Should().BeFalse(because: "Некорректный знак"); + numberForCheck.IsValidNumber("++1").Should().BeFalse(because: "Некорректный знак"); //Тесты для проверки данных не подходящих под регулярку numberForCheck.IsValidNumber("0.0").Should().BeTrue(); numberForCheck.IsValidNumber("0").Should().BeTrue(); numberForCheck.IsValidNumber("+1.23").Should().BeTrue(); + numberForCheck.IsValidNumber("+1,23").Should().BeTrue(because: "Знак запятой допустим"); numberForCheck = new NumberValidator(4, 2, false); numberForCheck.IsValidNumber("-1.23").Should().BeTrue(); //Тесты для проверки "нормальных" и пороговых значений numberForCheck = new NumberValidator(3, 2, true); - numberForCheck.IsValidNumber("00.00").Should().BeFalse(); - numberForCheck.IsValidNumber("-0.0").Should().BeFalse(); - numberForCheck.IsValidNumber("+0.00").Should().BeFalse(); + numberForCheck.IsValidNumber("00.00").Should().BeFalse(because: "Используется больше символов чем положено"); + numberForCheck.IsValidNumber("-0.0").Should().BeFalse(because: "Число отрицательное, хотя флаг не выставлен"); + numberForCheck.IsValidNumber("+0.00").Should().BeFalse(because: "Используется больше символов чем положено"); //Тесты для проверки неподходящих по условию значений } } From 6ad466a2690ad93606326efb6dd8a4f1cf025c93 Mon Sep 17 00:00:00 2001 From: crycrash Date: Wed, 6 Nov 2024 21:13:12 +0500 Subject: [PATCH 3/3] Homework fixed unusual variants of numbers and Id assertion --- .../Basic/Homework/1. ObjectComparison/ObjectComparison.cs | 2 +- .../Basic/Homework/2. NumberValidator/NumberValidatorTests.cs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs index 181190e..6535409 100644 --- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs +++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs @@ -16,7 +16,7 @@ public void CheckCurrentTsar() new Person("Vasili III of Russia", 28, 170, 60, null)); actualTsar.Should().BeEquivalentTo(expectedTsar, options => options .IncludingNestedObjects() - .Excluding(p => p.Path.Contains("Id"))); + .Excluding(p => p.Name.Equals(nameof(Person.Id)) && p.DeclaringType == typeof(Person))); //+Проверяет все поля класса на эквивалентность //+При добавлении нового поля в класс проверка будет автоматически включена //+Уменьшено количество кода diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs index 9ef669d..3dfe9cb 100644 --- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs +++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs @@ -33,7 +33,6 @@ public void Test() numberForCheck.IsValidNumber(null).Should().BeFalse(because: "Ввод пуст"); numberForCheck.IsValidNumber("a.sd").Should().BeFalse(because: "Используются не арабские цифры"); - numberForCheck.IsValidNumber("సున్న.నాలుగు").Should().BeFalse(because: "Используются не арабские цифры"); numberForCheck.IsValidNumber("IV.III").Should().BeFalse(because: "Используются не арабские цифры"); numberForCheck.IsValidNumber("девять.ноль").Should().BeFalse(because: "Используются не арабские цифры"); @@ -51,6 +50,9 @@ public void Test() numberForCheck.IsValidNumber("+1,23").Should().BeTrue(because: "Знак запятой допустим"); numberForCheck = new NumberValidator(4, 2, false); numberForCheck.IsValidNumber("-1.23").Should().BeTrue(); + numberForCheck.IsValidNumber("౧.౪").Should().BeTrue(because: "Используются цифры телугу"); + numberForCheck.IsValidNumber("๕.๕").Should().BeTrue(because: "Используются тайские цифры"); + numberForCheck.IsValidNumber("४.४").Should().BeTrue(because: "Используются цифры деванагари"); //Тесты для проверки "нормальных" и пороговых значений numberForCheck = new NumberValidator(3, 2, true);