From 26414f8be4366fd8267fcff81c8a126f1a83ad84 Mon Sep 17 00:00:00 2001 From: RRAleshev Date: Sun, 26 Nov 2023 20:27:24 +0500 Subject: [PATCH 1/2] Testing homework --- cs/HomeExercises/NumberValidatorTests.cs | 62 ++++++++++++++++-------- cs/HomeExercises/ObjectComparison.cs | 27 ++++++----- 2 files changed, 55 insertions(+), 34 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index a2878113..6af37ee9 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -1,34 +1,54 @@ using System; +using System.Runtime.InteropServices.ComTypes; using System.Text.RegularExpressions; using FluentAssertions; +using Microsoft.VisualStudio.TestPlatform.Common.Interfaces; +using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities; using NUnit.Framework; namespace HomeExercises { 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)); + [TestCase(-1,2 ,TestName = "Throw Exception on negative Precision")] + [TestCase(2, -1, TestName = "Throw Exception on negative Scale ")] + [TestCase(2, 3, TestName = "Throw Exception if Scale is greater than Precision ")] + [TestCase(1, 1, TestName = "Throw Exception if Scale is equal Precision ")] + [TestCase(0, 1, TestName = "Throw Exception on zero Precision ")] + public void NumberValidator_IncorrectValues_ThrowException(int precision, int scale) + { + Action a = () => new NumberValidator(precision, scale); - 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")); - } - } + a.Should().Throw(); + } + + [TestCase(1, 0, TestName = "Don't throw Exception on correct values")] + public void NumberValidator_CorrectValue_NotThrowException(int precision, int scale) + { + Action a = () => new NumberValidator(precision, scale); + + a.Should().NotThrow(); + } + + [TestCase(17, 2, "0.0", TestName = "Return True on correct values")] + public void NumberValidator_CorrectValue_ShouldReturnTrue(int precision, int scale,string number) + { + new NumberValidator(precision, scale,true).IsValidNumber(number).Should().Be(true); + } + + [TestCase(3, 2, "a.sd", TestName = "Return False on incorrect number")] + [TestCase(3, 2, "", TestName = "Return False on empty string")] + [TestCase(3, 2, null, TestName = "Return False on null string")] + [TestCase(3, 2, "-1.23", TestName = "Return False on negative number if only positive allowed")] + [TestCase(4, 2, "1.111", TestName = "Return False if fraction is longer than Scale")] + [TestCase(4, 2, "111.11", TestName = "Return False if number length is greater than Precision")] + [TestCase(3, 2, "+1.23", TestName = "Return False if number length with sign is greater than Precision")] + + public void NumberValidator_IncorrectValue_ShouldReturnFalse(int precision, int scale, string number) + { + new NumberValidator(precision, scale,true).IsValidNumber(number).Should().Be(false); + } + } public class NumberValidator { diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 44d9aed4..731f4207 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -16,18 +16,17 @@ 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); - } + // Cравниваем все свойства, кроме исключенных + actualTsar.Should().BeEquivalentTo(expectedTsar,options => options.Excluding(x=>x.Id).Excluding((x=>x.Parent!.Id))); - [Test] + // Тесты описываются более естественным языком + // Сообщения об ошибках более информативны + // При добавлении новых полей для сравнения не нужно изменять тест + + } + + [Test] [Description("Альтернативное решение. Какие у него недостатки?")] public void CheckCurrentTsar_WithCustomEquality() { @@ -35,9 +34,11 @@ 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)); - // Какие недостатки у такого подхода? - Assert.True(AreEqual(actualTsar, expectedTsar)); - } + // Какие недостатки у такого подхода? + //При добавлении свойств нужно изменять метод AreEquals + //Неинформативное сообщение об ошибке - не понятно, в чем именно различаются объекты + Assert.True(AreEqual(actualTsar, expectedTsar)); + } private bool AreEqual(Person? actual, Person? expected) { From 15c8a0e2850819953802f1aa97243d3db85aa2ab Mon Sep 17 00:00:00 2001 From: RRAleshev Date: Wed, 29 Nov 2023 20:26:58 +0500 Subject: [PATCH 2/2] Fixes Fixed formattind Added postive tests in NumberValidatorTests --- cs/HomeExercises/NumberValidatorTests.cs | 67 +++++++++++++----------- cs/HomeExercises/ObjectComparison.cs | 17 +++--- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/cs/HomeExercises/NumberValidatorTests.cs b/cs/HomeExercises/NumberValidatorTests.cs index 6af37ee9..fca91eda 100644 --- a/cs/HomeExercises/NumberValidatorTests.cs +++ b/cs/HomeExercises/NumberValidatorTests.cs @@ -10,45 +10,50 @@ namespace HomeExercises { public class NumberValidatorTests { - [TestCase(-1,2 ,TestName = "Throw Exception on negative Precision")] + [TestCase(-1, 2, TestName = "Throw Exception on negative Precision")] [TestCase(2, -1, TestName = "Throw Exception on negative Scale ")] - [TestCase(2, 3, TestName = "Throw Exception if Scale is greater than Precision ")] + [TestCase(2, 3, TestName = "Throw Exception if Scale is greater than Precision ")] [TestCase(1, 1, TestName = "Throw Exception if Scale is equal Precision ")] - [TestCase(0, 1, TestName = "Throw Exception on zero Precision ")] - public void NumberValidator_IncorrectValues_ThrowException(int precision, int scale) - { - Action a = () => new NumberValidator(precision, scale); + [TestCase(0, 1, TestName = "Throw Exception on zero Precision ")] + public void NumberValidator_IncorrectValues_ThrowException(int precision, int scale) + { + Action a = () => new NumberValidator(precision, scale); - a.Should().Throw(); - } + a.Should().Throw(); + } - [TestCase(1, 0, TestName = "Don't throw Exception on correct values")] - public void NumberValidator_CorrectValue_NotThrowException(int precision, int scale) - { - Action a = () => new NumberValidator(precision, scale); + [TestCase(1, 0, TestName = "Don't throw Exception on correct values")] + public void NumberValidator_CorrectValue_NotThrowException(int precision, int scale) + { + Action a = () => new NumberValidator(precision, scale); - a.Should().NotThrow(); - } + a.Should().NotThrow(); + } - [TestCase(17, 2, "0.0", TestName = "Return True on correct values")] - public void NumberValidator_CorrectValue_ShouldReturnTrue(int precision, int scale,string number) - { - new NumberValidator(precision, scale,true).IsValidNumber(number).Should().Be(true); - } + [TestCase(17, 2, true, "0.0", TestName = "Return True on correct values")] + [TestCase(5, 2, true, "+12.34", TestName = "Positive float wit sign")] + [TestCase(5, 2, false, "-12.34", TestName = "Negative float wit sign")] + [TestCase(5, 0, true, "12345", TestName = "Integer")] + [TestCase(5, 2, true, "123,45", TestName = "Comma separated float")] + public void NumberValidator_CorrectValue_ShouldReturnTrue(int precision, int scale, bool onlyPositive, + string number) + { + new NumberValidator(precision, scale, onlyPositive).IsValidNumber(number).Should().Be(true); + } - [TestCase(3, 2, "a.sd", TestName = "Return False on incorrect number")] - [TestCase(3, 2, "", TestName = "Return False on empty string")] - [TestCase(3, 2, null, TestName = "Return False on null string")] - [TestCase(3, 2, "-1.23", TestName = "Return False on negative number if only positive allowed")] - [TestCase(4, 2, "1.111", TestName = "Return False if fraction is longer than Scale")] - [TestCase(4, 2, "111.11", TestName = "Return False if number length is greater than Precision")] - [TestCase(3, 2, "+1.23", TestName = "Return False if number length with sign is greater than Precision")] + [TestCase(3, 2, "a.sd", TestName = "Return False on incorrect number")] + [TestCase(3, 2, "", TestName = "Return False on empty string")] + [TestCase(3, 2, null, TestName = "Return False on null string")] + [TestCase(3, 2, "-1.23", TestName = "Return False on negative number if only positive allowed")] + [TestCase(4, 2, "1.111", TestName = "Return False if fraction is longer than Scale")] + [TestCase(4, 2, "111.11", TestName = "Return False if number length is greater than Precision")] + [TestCase(3, 2, "+1.23", TestName = "Return False if number length with sign is greater than Precision")] - public void NumberValidator_IncorrectValue_ShouldReturnFalse(int precision, int scale, string number) - { - new NumberValidator(precision, scale,true).IsValidNumber(number).Should().Be(false); - } - } + public void NumberValidator_IncorrectValue_ShouldReturnFalse(int precision, int scale, string number) + { + new NumberValidator(precision, scale, true).IsValidNumber(number).Should().Be(false); + } + } public class NumberValidator { diff --git a/cs/HomeExercises/ObjectComparison.cs b/cs/HomeExercises/ObjectComparison.cs index 731f4207..14347bcb 100644 --- a/cs/HomeExercises/ObjectComparison.cs +++ b/cs/HomeExercises/ObjectComparison.cs @@ -18,15 +18,16 @@ public void CheckCurrentTsar() // Перепишите код на использование Fluent Assertions. // Cравниваем все свойства, кроме исключенных - actualTsar.Should().BeEquivalentTo(expectedTsar,options => options.Excluding(x=>x.Id).Excluding((x=>x.Parent!.Id))); + actualTsar.Should().BeEquivalentTo(expectedTsar, + options => options.Excluding(x => x.Id).Excluding(x => x.Parent!.Id)); // Тесты описываются более естественным языком // Сообщения об ошибках более информативны // При добавлении новых полей для сравнения не нужно изменять тест - } + } - [Test] + [Test] [Description("Альтернативное решение. Какие у него недостатки?")] public void CheckCurrentTsar_WithCustomEquality() { @@ -34,11 +35,11 @@ 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)); - // Какие недостатки у такого подхода? - //При добавлении свойств нужно изменять метод AreEquals - //Неинформативное сообщение об ошибке - не понятно, в чем именно различаются объекты - Assert.True(AreEqual(actualTsar, expectedTsar)); - } + // Какие недостатки у такого подхода? + // При добавлении свойств нужно изменять метод AreEquals + // Неинформативное сообщение об ошибке - не понятно, в чем именно различаются объекты + Assert.True(AreEqual(actualTsar, expectedTsar)); + } private bool AreEqual(Person? actual, Person? expected) {