From bd903db35e9eef0727be0ee395c0e8a5baf33baf Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 01:53:13 +0500
Subject: [PATCH 01/14] homework done
---
Testing/.idea/.idea.Testing/.idea/.gitignore | 13 +++
.../.idea/.idea.Testing/.idea/encodings.xml | 4 +
.../.idea/.idea.Testing/.idea/indexLayout.xml | 8 ++
Testing/.idea/.idea.Testing/.idea/vcs.xml | 6 ++
.../1. ObjectComparison/ObjectComparison.cs | 35 +++++-
.../NumberValidatorTests.cs | 102 +++++++++++++++++-
Testing/Testing.sln.DotSettings.user | 7 ++
7 files changed, 171 insertions(+), 4 deletions(-)
create mode 100644 Testing/.idea/.idea.Testing/.idea/.gitignore
create mode 100644 Testing/.idea/.idea.Testing/.idea/encodings.xml
create mode 100644 Testing/.idea/.idea.Testing/.idea/indexLayout.xml
create mode 100644 Testing/.idea/.idea.Testing/.idea/vcs.xml
create mode 100644 Testing/Testing.sln.DotSettings.user
diff --git a/Testing/.idea/.idea.Testing/.idea/.gitignore b/Testing/.idea/.idea.Testing/.idea/.gitignore
new file mode 100644
index 0000000..96415b3
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/modules.xml
+/.idea.Testing.iml
+/contentModel.xml
+/projectSettingsUpdater.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/Testing/.idea/.idea.Testing/.idea/encodings.xml b/Testing/.idea/.idea.Testing/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/indexLayout.xml b/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/vcs.xml b/Testing/.idea/.idea.Testing/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ 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..b246f42 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
@@ -19,13 +20,41 @@ public void CheckCurrentTsar()
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);
+
+
+
+ }
+
+ [Test]
+ [Description("Проверка текущего царя")]
+ [Category("ToRefactor")]
+ public void CheckCurrentTsarFluentAssertions()
+ {
+ var actualTsar = TsarRegistry.GetCurrentTsar();
+
+ var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70,
+ new Person("Vasili III of Russia", 28, 170, 60, null));
+
+
+ actualTsar.Should().BeEquivalentTo(expectedTsar, options =>
+ options
+ .Excluding(p => p.Id)
+ .Excluding(p => p.Parent.Id)
+ );
+ // Тест с FluentAssertions имеет следующие приемущества:
+ // 1) Автоматически расширяется при добавлении новых свойств в класс Person
+ // 2) Лучшая читаемость кода
+ // 3) При ошибке видно сразу каке свойтво не совпало, например если изменить возраст в expectedTsar вывод будет содержать "Expected field actualTsar.Age to be 53, but found 54."
+ // а при Assert "Assert.That(actual, Is.EqualTo(expected)) Expected: 54 But was: 53" - не понятно какое именно свойтво провалило тест
+
}
+
[Test]
[Description("Альтернативное решение. Какие у него недостатки?")]
public void CheckCurrentTsar_WithCustomEquality()
@@ -36,6 +65,10 @@ public void CheckCurrentTsar_WithCustomEquality()
// Какие недостатки у такого подхода?
ClassicAssert.True(AreEqual(actualTsar, expectedTsar));
+
+ // Недостатки такого подхода следущие:
+ // 1) Есть отдельный метод AreEqual и при изменении класса Person нужно будет идти в него менять т.е. сложно поддреживать
+ // 2) В стек-трейсе нет информации о том, какое именно свойство не совпало
}
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..787f3ff 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -13,14 +13,14 @@ 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.DoesNotThrow(() => new NumberValidator(1, 0, true)); // Дублирует 2 проверку
- ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0"));
+ ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); // Дублирует 3 проверку
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.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); // Дублирует 3 проверку
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"));
@@ -28,4 +28,100 @@ public void Test()
ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("-1.23"));
ClassicAssert.IsFalse(new NumberValidator(3, 2, true).IsValidNumber("a.sd"));
}
+}
+
+
+// Было изменено:
+// 1) Тесты были разделены на логические группы для лучшей читаемости
+// 2) Были добалены сообщения к каждому тесту чтобы из стек-трейса было понятно на каких данных тест не работает
+// 3) Использован Assert.Multiple() для того чтобы одна упавшая проверка не блокировала прохождение остальных проверок
+// 4) Удалены дублирующиеся тесты
+// 5) Добавлены тесты проверяющие: пограничные значения на scale и precision, параметр onlyPositive=false, пустую строку и null, запятую в качетве разделителя,
+// некоректные форматы чисел (2 точки; число начинается с точки; без дробной части, но с точкой), отрицательный ноль.
+
+[TestFixture]
+public class NumberValidatorTestsFix
+{
+ [Test]
+ public void КонструкторКорректноВалидируетПараметры()
+ {
+ // Некорректные параметры
+ Assert.Throws(() => new NumberValidator(-1, 2));
+ Assert.Throws(() => new NumberValidator(5, -1));
+ Assert.Throws(() => new NumberValidator(5, 6));
+
+ // Корректные параметры
+ Assert.DoesNotThrow(() => new NumberValidator(1, 0));
+ Assert.DoesNotThrow(() => new NumberValidator(5, 2));
+ Assert.DoesNotThrow(() => new NumberValidator(1, 0, true));
+ }
+
+ [Test]
+ public void IsValidNumberКорректноОбрабатываетОсновныеСценарии()
+ {
+ var validator = new NumberValidator(17, 2, true);
+
+ Assert.Multiple(() =>
+ {
+ // Корректные числа
+ Assert.That(validator.IsValidNumber("0"), Is.True, "Целый ноль");
+ Assert.That(validator.IsValidNumber("0.0"), Is.True, "Десятичный ноль");
+ Assert.That(validator.IsValidNumber("123.45"), Is.True, "Корректное десятичное");
+ Assert.That(validator.IsValidNumber("+1.23"), Is.True, "С явным плюсом");
+
+ // Некорректные числа
+ Assert.That(validator.IsValidNumber("-1.23"), Is.False, "Отрицательное при onlyPositive=true");
+ Assert.That(validator.IsValidNumber("00.00"), Is.False, "Превышение precision");
+ Assert.That(validator.IsValidNumber("0.000"), Is.False, "Превышение scale");
+ Assert.That(validator.IsValidNumber("a.sd"), Is.False, "Нечисловой формат");
+ Assert.That(validator.IsValidNumber(""), Is.False, "Пустая строка");
+ Assert.That(validator.IsValidNumber(null), Is.False, "Null");
+ });
+ }
+
+ [Test]
+ public void IsValidNumberКорректноРаботаетСPrecisionИScale()
+ {
+ var strictValidator = new NumberValidator(3, 2);
+
+ Assert.Multiple(() =>
+ {
+ // Граничные случаи
+ Assert.That(strictValidator.IsValidNumber("1.23"), Is.True, "Максимальная precision и scale");
+ Assert.That(strictValidator.IsValidNumber("12.3"), Is.True, "Граница precision");
+ Assert.That(strictValidator.IsValidNumber("0.12"), Is.True, "Граница scale");
+
+ // Превышение лимитов
+ Assert.That(strictValidator.IsValidNumber("12.34"), Is.False, "Превышение precision");
+ Assert.That(strictValidator.IsValidNumber("123.4"), Is.False, "Превышение precision в целой части");
+ });
+ }
+
+ [Test]
+ public void IsValidNumberКорректноРаботаетСРежимомOnlyPositive()
+ {
+ var positiveOnly = new NumberValidator(5, 2, true);
+ var anyNum = new NumberValidator(5, 2, false);
+
+ Assert.Multiple(() =>
+ {
+ Assert.That(positiveOnly.IsValidNumber("-1.23"), Is.False, "Только положительные: отрицательное число");
+ Assert.That(anyNum.IsValidNumber("-1.23"), Is.True, "Любые знаки: отрицательное число");
+ Assert.That(anyNum.IsValidNumber("+1.23"), Is.True, "Любые знаки: положительное с плюсом");
+ Assert.That(anyNum.IsValidNumber("-0"), Is.True, "Любые знаки: отрицательный ноль");
+ });
+ }
+
+ [Test]
+ public void IsValidNumberКорректноВалидируетФорматы()
+ {
+ var validator = new NumberValidator(10, 2);
+
+ Assert.Multiple(() =>
+ {
+ Assert.That(validator.IsValidNumber("12..34"), Is.False, "Две точки");
+ Assert.That(validator.IsValidNumber(".123"), Is.False, "Начинается с точки");
+ Assert.That(validator.IsValidNumber("123."), Is.False, "Оканчивается точкой");
+ });
+ }
}
\ No newline at end of file
diff --git a/Testing/Testing.sln.DotSettings.user b/Testing/Testing.sln.DotSettings.user
new file mode 100644
index 0000000..b4e3475
--- /dev/null
+++ b/Testing/Testing.sln.DotSettings.user
@@ -0,0 +1,7 @@
+
+ <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from 1. ObjectComparison" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
+ <Or>
+ <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:1. ObjectComparison</ProjectFolder>
+ <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:2. NumberValidator</ProjectFolder>
+ </Or>
+</SessionState>
\ No newline at end of file
From 788579ac177386e8cc503ec20981ff58673d9345 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 22:27:39 +0500
Subject: [PATCH 02/14] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?=
=?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20CheckCurrentTsa?=
=?UTF-8?q?rFluentAssertions=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BB=D0=BE?=
=?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20Parent?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Testing/.idea/.idea.Testing/.idea/.gitignore | 13 -------------
Testing/.idea/.idea.Testing/.idea/encodings.xml | 4 ----
Testing/.idea/.idea.Testing/.idea/indexLayout.xml | 8 --------
Testing/.idea/.idea.Testing/.idea/vcs.xml | 6 ------
.../1. ObjectComparison/ObjectComparison.cs | 5 ++++-
Testing/Testing.sln.DotSettings.user | 7 -------
6 files changed, 4 insertions(+), 39 deletions(-)
delete mode 100644 Testing/.idea/.idea.Testing/.idea/.gitignore
delete mode 100644 Testing/.idea/.idea.Testing/.idea/encodings.xml
delete mode 100644 Testing/.idea/.idea.Testing/.idea/indexLayout.xml
delete mode 100644 Testing/.idea/.idea.Testing/.idea/vcs.xml
delete mode 100644 Testing/Testing.sln.DotSettings.user
diff --git a/Testing/.idea/.idea.Testing/.idea/.gitignore b/Testing/.idea/.idea.Testing/.idea/.gitignore
deleted file mode 100644
index 96415b3..0000000
--- a/Testing/.idea/.idea.Testing/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/modules.xml
-/.idea.Testing.iml
-/contentModel.xml
-/projectSettingsUpdater.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/Testing/.idea/.idea.Testing/.idea/encodings.xml b/Testing/.idea/.idea.Testing/.idea/encodings.xml
deleted file mode 100644
index df87cf9..0000000
--- a/Testing/.idea/.idea.Testing/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/indexLayout.xml b/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163..0000000
--- a/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/vcs.xml b/Testing/.idea/.idea.Testing/.idea/vcs.xml
deleted file mode 100644
index 6c0b863..0000000
--- a/Testing/.idea/.idea.Testing/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ 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 b246f42..dd87c38 100644
--- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs
+++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs
@@ -1,6 +1,7 @@
using NUnit.Framework;
using NUnit.Framework.Legacy;
using FluentAssertions;
+using FluentAssertions.Equivalency;
namespace HomeExercise.Tasks.ObjectComparison;
public class ObjectComparison
@@ -44,7 +45,9 @@ public void CheckCurrentTsarFluentAssertions()
actualTsar.Should().BeEquivalentTo(expectedTsar, options =>
options
.Excluding(p => p.Id)
- .Excluding(p => p.Parent.Id)
+ .Excluding((IMemberInfo p) =>
+ p.Name == "Id" &&
+ p.Path.Contains("Parent"))
);
// Тест с FluentAssertions имеет следующие приемущества:
// 1) Автоматически расширяется при добавлении новых свойств в класс Person
diff --git a/Testing/Testing.sln.DotSettings.user b/Testing/Testing.sln.DotSettings.user
deleted file mode 100644
index b4e3475..0000000
--- a/Testing/Testing.sln.DotSettings.user
+++ /dev/null
@@ -1,7 +0,0 @@
-
- <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from 1. ObjectComparison" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
- <Or>
- <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:1. ObjectComparison</ProjectFolder>
- <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:2. NumberValidator</ProjectFolder>
- </Or>
-</SessionState>
\ No newline at end of file
From 0d22773b162fd68abe177c927bbea8cfbd48e214 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 22:37:14 +0500
Subject: [PATCH 03/14] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?=
=?UTF-8?q?=D1=8B=20=D1=81=D1=82=D0=B0=D1=80=D1=8B=D0=B5=20=D1=82=D0=B5?=
=?UTF-8?q?=D1=81=D1=82=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Testing/.idea/.idea.Testing/.idea/.gitignore | 13 +++++++
.../.idea/.idea.Testing/.idea/encodings.xml | 4 ++
.../.idea/.idea.Testing/.idea/indexLayout.xml | 8 ++++
Testing/.idea/.idea.Testing/.idea/vcs.xml | 6 +++
.../NumberValidatorTests.cs | 38 +------------------
Testing/Testing.sln.DotSettings.user | 7 ++++
6 files changed, 40 insertions(+), 36 deletions(-)
create mode 100644 Testing/.idea/.idea.Testing/.idea/.gitignore
create mode 100644 Testing/.idea/.idea.Testing/.idea/encodings.xml
create mode 100644 Testing/.idea/.idea.Testing/.idea/indexLayout.xml
create mode 100644 Testing/.idea/.idea.Testing/.idea/vcs.xml
create mode 100644 Testing/Testing.sln.DotSettings.user
diff --git a/Testing/.idea/.idea.Testing/.idea/.gitignore b/Testing/.idea/.idea.Testing/.idea/.gitignore
new file mode 100644
index 0000000..96415b3
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/modules.xml
+/.idea.Testing.iml
+/contentModel.xml
+/projectSettingsUpdater.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/Testing/.idea/.idea.Testing/.idea/encodings.xml b/Testing/.idea/.idea.Testing/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/indexLayout.xml b/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/vcs.xml b/Testing/.idea/.idea.Testing/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/Testing/.idea/.idea.Testing/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index 787f3ff..6e88f32 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -4,40 +4,6 @@
namespace HomeExercise.Tasks.NumberValidator;
-[TestFixture]
-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)); // Дублирует 2 проверку
-
- ClassicAssert.IsTrue(new NumberValidator(17, 2, true).IsValidNumber("0.0")); // Дублирует 3 проверку
- 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")); // Дублирует 3 проверку
- 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"));
- }
-}
-
-
-// Было изменено:
-// 1) Тесты были разделены на логические группы для лучшей читаемости
-// 2) Были добалены сообщения к каждому тесту чтобы из стек-трейса было понятно на каких данных тест не работает
-// 3) Использован Assert.Multiple() для того чтобы одна упавшая проверка не блокировала прохождение остальных проверок
-// 4) Удалены дублирующиеся тесты
-// 5) Добавлены тесты проверяющие: пограничные значения на scale и precision, параметр onlyPositive=false, пустую строку и null, запятую в качетве разделителя,
-// некоректные форматы чисел (2 точки; число начинается с точки; без дробной части, но с точкой), отрицательный ноль.
[TestFixture]
public class NumberValidatorTestsFix
@@ -59,7 +25,7 @@ public void КонструкторКорректноВалидируетПара
[Test]
public void IsValidNumberКорректноОбрабатываетОсновныеСценарии()
{
- var validator = new NumberValidator(17, 2, true);
+ var validator = new NumberValidator(5, 2, true);
Assert.Multiple(() =>
{
@@ -71,7 +37,7 @@ public void IsValidNumberКорректноОбрабатываетОсновн
// Некорректные числа
Assert.That(validator.IsValidNumber("-1.23"), Is.False, "Отрицательное при onlyPositive=true");
- Assert.That(validator.IsValidNumber("00.00"), Is.False, "Превышение precision");
+ Assert.That(validator.IsValidNumber("00.000"), Is.False, "Превышение precision");
Assert.That(validator.IsValidNumber("0.000"), Is.False, "Превышение scale");
Assert.That(validator.IsValidNumber("a.sd"), Is.False, "Нечисловой формат");
Assert.That(validator.IsValidNumber(""), Is.False, "Пустая строка");
diff --git a/Testing/Testing.sln.DotSettings.user b/Testing/Testing.sln.DotSettings.user
new file mode 100644
index 0000000..b4e3475
--- /dev/null
+++ b/Testing/Testing.sln.DotSettings.user
@@ -0,0 +1,7 @@
+
+ <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from 1. ObjectComparison" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
+ <Or>
+ <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:1. ObjectComparison</ProjectFolder>
+ <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:2. NumberValidator</ProjectFolder>
+ </Or>
+</SessionState>
\ No newline at end of file
From 47dae7719f55adc1c573d11864d15d539d1a6d79 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 22:49:40 +0500
Subject: [PATCH 04/14] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BF?=
=?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0?=
=?UTF-8?q?=D0=BD=D1=8B=20=D0=BD=D0=B0=20=D0=B0=D0=BD=D0=B3=D0=BB=D0=B8?=
=?UTF-8?q?=D0=B9=D1=81=D0=BA=D0=B8=D0=B9,=20=D0=B8=20=D0=B8=D1=81=D0=BF?=
=?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D1=81?=
=?UTF-8?q?=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D0=B2=D0=B8=D0=B8=20?=
=?UTF-8?q?=D1=81=20=D0=BF=D1=80=D0=B5=D0=B7=D0=B5=D0=BD=D1=82=D0=B0=D1=86?=
=?UTF-8?q?=D0=B8=D0=B5=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../NumberValidatorTests.cs | 32 ++++++++++++-------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index 6e88f32..912998d 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -9,33 +9,43 @@ namespace HomeExercise.Tasks.NumberValidator;
public class NumberValidatorTestsFix
{
[Test]
- public void КонструкторКорректноВалидируетПараметры()
+ public void Constructor_WithInvalidParameters_ThrowsArgumentException()
{
- // Некорректные параметры
Assert.Throws(() => new NumberValidator(-1, 2));
Assert.Throws(() => new NumberValidator(5, -1));
Assert.Throws(() => new NumberValidator(5, 6));
-
- // Корректные параметры
+ }
+
+ [Test]
+ public void Constructor_WithValidParameters_DoesNotThrow()
+ {
Assert.DoesNotThrow(() => new NumberValidator(1, 0));
Assert.DoesNotThrow(() => new NumberValidator(5, 2));
Assert.DoesNotThrow(() => new NumberValidator(1, 0, true));
}
[Test]
- public void IsValidNumberКорректноОбрабатываетОсновныеСценарии()
+ public void IsValidNumber_WithValidNumberFormats_ReturnsTrue()
{
var validator = new NumberValidator(5, 2, true);
Assert.Multiple(() =>
{
- // Корректные числа
Assert.That(validator.IsValidNumber("0"), Is.True, "Целый ноль");
Assert.That(validator.IsValidNumber("0.0"), Is.True, "Десятичный ноль");
Assert.That(validator.IsValidNumber("123.45"), Is.True, "Корректное десятичное");
Assert.That(validator.IsValidNumber("+1.23"), Is.True, "С явным плюсом");
-
- // Некорректные числа
+
+ });
+ }
+
+ [Test]
+ public void IsValidNumber_WithInvalidNumberFormats_ReturnsFalse()
+ {
+ var validator = new NumberValidator(5, 2, true);
+
+ Assert.Multiple(() =>
+ {
Assert.That(validator.IsValidNumber("-1.23"), Is.False, "Отрицательное при onlyPositive=true");
Assert.That(validator.IsValidNumber("00.000"), Is.False, "Превышение precision");
Assert.That(validator.IsValidNumber("0.000"), Is.False, "Превышение scale");
@@ -46,7 +56,7 @@ public void IsValidNumberКорректноОбрабатываетОсновн
}
[Test]
- public void IsValidNumberКорректноРаботаетСPrecisionИScale()
+ public void IsValidNumber_WithPrecisionAndScaleLimits_RespectsBoundaries()
{
var strictValidator = new NumberValidator(3, 2);
@@ -64,7 +74,7 @@ public void IsValidNumberКорректноРаботаетСPrecisionИScale()
}
[Test]
- public void IsValidNumberКорректноРаботаетСРежимомOnlyPositive()
+ public void IsValidNumber_WithOnlyPositiveMode_RespectsSignRestrictions()
{
var positiveOnly = new NumberValidator(5, 2, true);
var anyNum = new NumberValidator(5, 2, false);
@@ -79,7 +89,7 @@ public void IsValidNumberКорректноРаботаетСРежимомOnlyP
}
[Test]
- public void IsValidNumberКорректноВалидируетФорматы()
+ public void IsValidNumber_WithInvalidFormats_ReturnsFalse()
{
var validator = new NumberValidator(10, 2);
From 81a3eeb995af4c5058c42b0c34f6cf491dcec803 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 22:52:13 +0500
Subject: [PATCH 05/14] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?=
=?UTF-8?q?=D1=8B=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B5=20=D0=BA=D0=BE?=
=?UTF-8?q?=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D1=8B,=20=D1=82=D0=B5=D1=81?=
=?UTF-8?q?=D1=82=D1=8B=20=D1=81=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8=D1=80?=
=?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../2. NumberValidator/NumberValidatorTests.cs | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index 912998d..290db4a 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -56,18 +56,25 @@ public void IsValidNumber_WithInvalidNumberFormats_ReturnsFalse()
}
[Test]
- public void IsValidNumber_WithPrecisionAndScaleLimits_RespectsBoundaries()
+ public void IsValidNumber_WithValidPrecisionAndScale_ReturnsTrue()
{
var strictValidator = new NumberValidator(3, 2);
-
+
Assert.Multiple(() =>
{
- // Граничные случаи
Assert.That(strictValidator.IsValidNumber("1.23"), Is.True, "Максимальная precision и scale");
Assert.That(strictValidator.IsValidNumber("12.3"), Is.True, "Граница precision");
Assert.That(strictValidator.IsValidNumber("0.12"), Is.True, "Граница scale");
-
- // Превышение лимитов
+ });
+ }
+
+ [Test]
+ public void IsValidNumber_WithExceededPrecisionAndScale_ReturnsFalse()
+ {
+ var strictValidator = new NumberValidator(3, 2);
+
+ Assert.Multiple(() =>
+ {
Assert.That(strictValidator.IsValidNumber("12.34"), Is.False, "Превышение precision");
Assert.That(strictValidator.IsValidNumber("123.4"), Is.False, "Превышение precision в целой части");
});
From f4ce5503940d1e8fd2e760e45375f5093ace2383 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:17:52 +0500
Subject: [PATCH 06/14] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D1=8B=20TestCase,=20=D0=B2=D1=81=D0=B5=20=D1=82?=
=?UTF-8?q?=D0=B5=D1=81=D1=82=D1=8B=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=B8?=
=?UTF-8?q?=D1=81=D0=B0=D0=BD=D1=8B=20=D0=BD=D0=B0=20FluentAssertions?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../NumberValidatorTests.cs | 117 ++++++++----------
1 file changed, 52 insertions(+), 65 deletions(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index 290db4a..8779a01 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.Legacy;
+using FluentAssertions;
namespace HomeExercise.Tasks.NumberValidator;
@@ -8,76 +9,67 @@ namespace HomeExercise.Tasks.NumberValidator;
[TestFixture]
public class NumberValidatorTestsFix
{
- [Test]
- public void Constructor_WithInvalidParameters_ThrowsArgumentException()
+ [TestCase(-1, 2)]
+ [TestCase(5, -1)]
+ [TestCase(5, 6)]
+ public void Constructor_WithInvalidParameters_ThrowsArgumentException(int precision, int scale)
{
- Assert.Throws(() => new NumberValidator(-1, 2));
- Assert.Throws(() => new NumberValidator(5, -1));
- Assert.Throws(() => new NumberValidator(5, 6));
+ Action action = () => new NumberValidator(precision, scale);
+
+ action.Should().Throw();
}
- [Test]
- public void Constructor_WithValidParameters_DoesNotThrow()
+ [TestCase(1, 0)]
+ [TestCase(5, 2)]
+ [TestCase(1, 0, true)]
+ public void Constructor_WithValidParameters_DoesNotThrow(int precision, int scale, bool onlyPositive = false)
{
- Assert.DoesNotThrow(() => new NumberValidator(1, 0));
- Assert.DoesNotThrow(() => new NumberValidator(5, 2));
- Assert.DoesNotThrow(() => new NumberValidator(1, 0, true));
+ Action action = () => new NumberValidator(precision, scale, onlyPositive);
+
+ action.Should().NotThrow();
}
- [Test]
- public void IsValidNumber_WithValidNumberFormats_ReturnsTrue()
+ [TestCase("0", "Целый ноль")]
+ [TestCase("0.0", "Десятичный ноль")]
+ [TestCase("123.45", "Корректное десятичное")]
+ [TestCase("+1.23", "С явным плюсом")]
+ public void IsValidNumber_WithValidNumberFormats_ReturnsTrue(string number, string description)
{
var validator = new NumberValidator(5, 2, true);
-
- Assert.Multiple(() =>
- {
- Assert.That(validator.IsValidNumber("0"), Is.True, "Целый ноль");
- Assert.That(validator.IsValidNumber("0.0"), Is.True, "Десятичный ноль");
- Assert.That(validator.IsValidNumber("123.45"), Is.True, "Корректное десятичное");
- Assert.That(validator.IsValidNumber("+1.23"), Is.True, "С явным плюсом");
- });
+ validator.IsValidNumber(number).Should().BeTrue(description);
}
- [Test]
- public void IsValidNumber_WithInvalidNumberFormats_ReturnsFalse()
+ [TestCase("-1.23", "Отрицательное при onlyPositive=true")]
+ [TestCase("00.000", "Превышение precision")]
+ [TestCase("0.000", "Превышение scale")]
+ [TestCase("a.sd", "Нечисловой формат")]
+ [TestCase("", "Пустая строка")]
+ [TestCase(null, "Null")]
+ public void IsValidNumber_WithInvalidNumberFormats_ReturnsFalse(string number, string description)
{
var validator = new NumberValidator(5, 2, true);
-
- Assert.Multiple(() =>
- {
- Assert.That(validator.IsValidNumber("-1.23"), Is.False, "Отрицательное при onlyPositive=true");
- Assert.That(validator.IsValidNumber("00.000"), Is.False, "Превышение precision");
- Assert.That(validator.IsValidNumber("0.000"), Is.False, "Превышение scale");
- Assert.That(validator.IsValidNumber("a.sd"), Is.False, "Нечисловой формат");
- Assert.That(validator.IsValidNumber(""), Is.False, "Пустая строка");
- Assert.That(validator.IsValidNumber(null), Is.False, "Null");
- });
+
+ validator.IsValidNumber(number).Should().BeFalse(description);
}
- [Test]
- public void IsValidNumber_WithValidPrecisionAndScale_ReturnsTrue()
+ [TestCase("1.23", "Максимальная precision и scale")]
+ [TestCase("12.3", "Граница precision")]
+ [TestCase("0.12", "Граница scale")]
+ public void IsValidNumber_WithValidPrecisionAndScale_ReturnsTrue(string number, string description)
{
var strictValidator = new NumberValidator(3, 2);
-
- Assert.Multiple(() =>
- {
- Assert.That(strictValidator.IsValidNumber("1.23"), Is.True, "Максимальная precision и scale");
- Assert.That(strictValidator.IsValidNumber("12.3"), Is.True, "Граница precision");
- Assert.That(strictValidator.IsValidNumber("0.12"), Is.True, "Граница scale");
- });
+
+ strictValidator.IsValidNumber(number).Should().BeTrue(description);
}
- [Test]
- public void IsValidNumber_WithExceededPrecisionAndScale_ReturnsFalse()
+ [TestCase("12.34", "Превышение precision")]
+ [TestCase("123.4", "Превышение precision в целой части")]
+ public void IsValidNumber_WithExceededPrecisionAndScale_ReturnsFalse(string number, string description)
{
var strictValidator = new NumberValidator(3, 2);
-
- Assert.Multiple(() =>
- {
- Assert.That(strictValidator.IsValidNumber("12.34"), Is.False, "Превышение precision");
- Assert.That(strictValidator.IsValidNumber("123.4"), Is.False, "Превышение precision в целой части");
- });
+
+ strictValidator.IsValidNumber(number).Should().BeFalse(description);
}
[Test]
@@ -86,25 +78,20 @@ public void IsValidNumber_WithOnlyPositiveMode_RespectsSignRestrictions()
var positiveOnly = new NumberValidator(5, 2, true);
var anyNum = new NumberValidator(5, 2, false);
- Assert.Multiple(() =>
- {
- Assert.That(positiveOnly.IsValidNumber("-1.23"), Is.False, "Только положительные: отрицательное число");
- Assert.That(anyNum.IsValidNumber("-1.23"), Is.True, "Любые знаки: отрицательное число");
- Assert.That(anyNum.IsValidNumber("+1.23"), Is.True, "Любые знаки: положительное с плюсом");
- Assert.That(anyNum.IsValidNumber("-0"), Is.True, "Любые знаки: отрицательный ноль");
- });
+
+ positiveOnly.IsValidNumber("-1.23").Should().BeFalse("Только положительные: отрицательное число");
+ anyNum.IsValidNumber("-1.23").Should().BeTrue("Любые знаки: отрицательное число");
+ anyNum.IsValidNumber("+1.23").Should().BeTrue("Любые знаки: положительное с плюсом");
+ anyNum.IsValidNumber("-0").Should().BeTrue("Любые знаки: отрицательный ноль");
}
- [Test]
- public void IsValidNumber_WithInvalidFormats_ReturnsFalse()
+ [TestCase("12..34", "Две точки")]
+ [TestCase(".123", "Начинается с точки")]
+ [TestCase("123.", "Оканчивается точкой")]
+ public void IsValidNumber_WithInvalidFormats_ReturnsFalse(string number, string description)
{
var validator = new NumberValidator(10, 2);
-
- Assert.Multiple(() =>
- {
- Assert.That(validator.IsValidNumber("12..34"), Is.False, "Две точки");
- Assert.That(validator.IsValidNumber(".123"), Is.False, "Начинается с точки");
- Assert.That(validator.IsValidNumber("123."), Is.False, "Оканчивается точкой");
- });
+
+ validator.IsValidNumber(number).Should().BeFalse(description);
}
}
\ No newline at end of file
From 3df44ce6cf1273afe0fe0ec30213866afbf312d6 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:21:05 +0500
Subject: [PATCH 07/14] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?=
=?UTF-8?q?=D0=B4=D1=83=D0=B1=D0=BB=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B8?=
=?UTF-8?q?=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB=D1=8F=20=D0=BA?=
=?UTF-8?q?=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80?=
=?UTF-8?q?=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Homework/2. NumberValidator/NumberValidatorTests.cs | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index 8779a01..53dfc16 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -19,15 +19,6 @@ public void Constructor_WithInvalidParameters_ThrowsArgumentException(int precis
action.Should().Throw();
}
- [TestCase(1, 0)]
- [TestCase(5, 2)]
- [TestCase(1, 0, true)]
- public void Constructor_WithValidParameters_DoesNotThrow(int precision, int scale, bool onlyPositive = false)
- {
- Action action = () => new NumberValidator(precision, scale, onlyPositive);
-
- action.Should().NotThrow();
- }
[TestCase("0", "Целый ноль")]
[TestCase("0.0", "Десятичный ноль")]
From b939226c44d582e36db7aa1ccd1f4b83001cb5c3 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:23:31 +0500
Subject: [PATCH 08/14] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?=
=?UTF-8?q?=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20=D1=82=D0=B5=D1=81=D1=82?=
=?UTF-8?q?=20=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B5=D0=B2=D1=8B=D1=88=D0=B5?=
=?UTF-8?q?=D0=BD=D0=B8=D0=B5=20pre=D1=81ision?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Basic/Homework/2. NumberValidator/NumberValidatorTests.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index 53dfc16..b41fe2d 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -54,7 +54,7 @@ public void IsValidNumber_WithValidPrecisionAndScale_ReturnsTrue(string number,
strictValidator.IsValidNumber(number).Should().BeTrue(description);
}
- [TestCase("12.34", "Превышение precision")]
+
[TestCase("123.4", "Превышение precision в целой части")]
public void IsValidNumber_WithExceededPrecisionAndScale_ReturnsFalse(string number, string description)
{
From f67c7f2ef9b69de673060ceddbf1bf089d53989a Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:35:42 +0500
Subject: [PATCH 09/14] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB?=
=?UTF-8?q?=D1=8F=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20OnlyPositive=20?=
=?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=20=D0=BD=D0=B0?=
=?UTF-8?q?=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../NumberValidatorTests.cs | 26 ++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index b41fe2d..b995975 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -62,20 +62,28 @@ public void IsValidNumber_WithExceededPrecisionAndScale_ReturnsFalse(string numb
strictValidator.IsValidNumber(number).Should().BeFalse(description);
}
-
+
[Test]
- public void IsValidNumber_WithOnlyPositiveMode_RespectsSignRestrictions()
+ public void IsValidNumber_WithOnlyPositiveTrue_RejectsNegativeNumbers()
{
- var positiveOnly = new NumberValidator(5, 2, true);
- var anyNum = new NumberValidator(5, 2, false);
-
-
+ var positiveOnly = new NumberValidator(5, 2, true);
+
positiveOnly.IsValidNumber("-1.23").Should().BeFalse("Только положительные: отрицательное число");
- anyNum.IsValidNumber("-1.23").Should().BeTrue("Любые знаки: отрицательное число");
- anyNum.IsValidNumber("+1.23").Should().BeTrue("Любые знаки: положительное с плюсом");
- anyNum.IsValidNumber("-0").Should().BeTrue("Любые знаки: отрицательный ноль");
}
+ [Test]
+ public void IsValidNumber_WithOnlyPositiveFalse_AcceptsAllSigns()
+ {
+ var anyNum = new NumberValidator(5, 2, false);
+
+ anyNum.IsValidNumber("-1.23").Should().BeTrue("Отрицательное число");
+ anyNum.IsValidNumber("+1.23").Should().BeTrue("Положительное число с плюсом");
+ anyNum.IsValidNumber("1.23").Should().BeTrue("Положительное число без плюсом");
+ anyNum.IsValidNumber("-0").Should().BeTrue("Отрицательный ноль");
+ }
+
+
+
[TestCase("12..34", "Две точки")]
[TestCase(".123", "Начинается с точки")]
[TestCase("123.", "Оканчивается точкой")]
From 5611bcb85efd93e30e6fdac4009b73ed8e09872e Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:41:30 +0500
Subject: [PATCH 10/14] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20=D0=B7?=
=?UTF-8?q?=D0=B0=D0=BF=D1=8F=D1=82=D1=83=D1=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Homework/2. NumberValidator/NumberValidatorTests.cs | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index b995975..b96fd76 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -93,4 +93,12 @@ public void IsValidNumber_WithInvalidFormats_ReturnsFalse(string number, string
validator.IsValidNumber(number).Should().BeFalse(description);
}
+
+ [TestCase("12,34", "Запятая в качестве разделителя")]
+ public void IsValidNumber_WithCommaAsSeparator_ReturnsTrue(string number, string description)
+ {
+ var validator = new NumberValidator(10, 2);
+
+ validator.IsValidNumber(number).Should().BeTrue(description);
+ }
}
\ No newline at end of file
From 7a696cb8546f47106feac6e02389a61861159810 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:48:25 +0500
Subject: [PATCH 11/14] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?=
=?UTF-8?q?=D0=B8=D0=B5=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D1=85=20=D1=84?=
=?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B8=D0=B7=20=D1=80=D0=B5?=
=?UTF-8?q?=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Testing/.idea/.idea.Testing/.idea/.gitignore | 13 -------------
Testing/.idea/.idea.Testing/.idea/encodings.xml | 4 ----
Testing/.idea/.idea.Testing/.idea/indexLayout.xml | 8 --------
Testing/.idea/.idea.Testing/.idea/vcs.xml | 6 ------
4 files changed, 31 deletions(-)
delete mode 100644 Testing/.idea/.idea.Testing/.idea/.gitignore
delete mode 100644 Testing/.idea/.idea.Testing/.idea/encodings.xml
delete mode 100644 Testing/.idea/.idea.Testing/.idea/indexLayout.xml
delete mode 100644 Testing/.idea/.idea.Testing/.idea/vcs.xml
diff --git a/Testing/.idea/.idea.Testing/.idea/.gitignore b/Testing/.idea/.idea.Testing/.idea/.gitignore
deleted file mode 100644
index 96415b3..0000000
--- a/Testing/.idea/.idea.Testing/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/modules.xml
-/.idea.Testing.iml
-/contentModel.xml
-/projectSettingsUpdater.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/Testing/.idea/.idea.Testing/.idea/encodings.xml b/Testing/.idea/.idea.Testing/.idea/encodings.xml
deleted file mode 100644
index df87cf9..0000000
--- a/Testing/.idea/.idea.Testing/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/indexLayout.xml b/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163..0000000
--- a/Testing/.idea/.idea.Testing/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Testing/.idea/.idea.Testing/.idea/vcs.xml b/Testing/.idea/.idea.Testing/.idea/vcs.xml
deleted file mode 100644
index 6c0b863..0000000
--- a/Testing/.idea/.idea.Testing/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
From 7c94a52274d7f69844af8524dd8031cf55b42787 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Wed, 29 Oct 2025 23:50:45 +0500
Subject: [PATCH 12/14] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?=
=?UTF-8?q?=D0=B8=D0=B5=20sln.DotSettings.user=20=D0=B8=D0=B7=20=D1=80?=
=?UTF-8?q?=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 ++
Testing/Testing.sln.DotSettings.user | 7 -------
2 files changed, 2 insertions(+), 7 deletions(-)
delete mode 100644 Testing/Testing.sln.DotSettings.user
diff --git a/.gitignore b/.gitignore
index 03c9b93..ae0d4c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
bin/
obj/
.vs/
+.idea/
+*.sln.DotSettings.user
diff --git a/Testing/Testing.sln.DotSettings.user b/Testing/Testing.sln.DotSettings.user
deleted file mode 100644
index b4e3475..0000000
--- a/Testing/Testing.sln.DotSettings.user
+++ /dev/null
@@ -1,7 +0,0 @@
-
- <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from 1. ObjectComparison" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
- <Or>
- <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:1. ObjectComparison</ProjectFolder>
- <ProjectFolder>6ED454CB-A772-43E5-B72D-3FE9DA27337F/d:Homework/d:2. NumberValidator</ProjectFolder>
- </Or>
-</SessionState>
\ No newline at end of file
From 28c71cb6d3237af61c72cdee395e46aa3a6daf74 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Thu, 30 Oct 2025 14:33:37 +0500
Subject: [PATCH 13/14] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?=
=?UTF-8?q?=D0=B2=20ObjectComparison?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Basic/Homework/1. ObjectComparison/ObjectComparison.cs | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs
index dd87c38..20add75 100644
--- a/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs
+++ b/Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs
@@ -43,12 +43,9 @@ public void CheckCurrentTsarFluentAssertions()
actualTsar.Should().BeEquivalentTo(expectedTsar, options =>
- options
- .Excluding(p => p.Id)
- .Excluding((IMemberInfo p) =>
- p.Name == "Id" &&
- p.Path.Contains("Parent"))
+ options.Excluding((IMemberInfo p) => p.Name == nameof(Person.Id))
);
+
// Тест с FluentAssertions имеет следующие приемущества:
// 1) Автоматически расширяется при добавлении новых свойств в класс Person
// 2) Лучшая читаемость кода
From 6996e46481c40c9a2c6a7bae4d7c25d362356231 Mon Sep 17 00:00:00 2001
From: artem <17artem12@gmail.com>
Date: Thu, 30 Oct 2025 14:56:19 +0500
Subject: [PATCH 14/14] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?=
=?UTF-8?q?=D0=B2=20NumberValidatorTests?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../NumberValidatorTests.cs | 50 ++++++-------------
1 file changed, 14 insertions(+), 36 deletions(-)
diff --git a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
index b96fd76..38e97e3 100644
--- a/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
+++ b/Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
@@ -7,16 +7,16 @@ namespace HomeExercise.Tasks.NumberValidator;
[TestFixture]
-public class NumberValidatorTestsFix
+public class NumberValidatorTests
{
- [TestCase(-1, 2)]
- [TestCase(5, -1)]
- [TestCase(5, 6)]
- public void Constructor_WithInvalidParameters_ThrowsArgumentException(int precision, int scale)
+ [TestCase(-1, 2, "Исключение, когда precision отрицательная")]
+ [TestCase(5, -1, "Исключение, когда scale отрицательный")]
+ [TestCase(5, 6, "Исключение, когда scale больше precision")]
+ public void Constructor_WithInvalidParameters_ThrowsArgumentException(int precision, int scale, string description)
{
Action action = () => new NumberValidator(precision, scale);
- action.Should().Throw();
+ action.Should().Throw(description);
}
@@ -32,7 +32,8 @@ public void IsValidNumber_WithValidNumberFormats_ReturnsTrue(string number, stri
}
[TestCase("-1.23", "Отрицательное при onlyPositive=true")]
- [TestCase("00.000", "Превышение precision")]
+ [TestCase("00.000", "Превышение precision в дробной части")]
+ [TestCase("1234.56", "Превышение precision в целой части")]
[TestCase("0.000", "Превышение scale")]
[TestCase("a.sd", "Нечисловой формат")]
[TestCase("", "Пустая строка")]
@@ -47,39 +48,23 @@ public void IsValidNumber_WithInvalidNumberFormats_ReturnsFalse(string number, s
[TestCase("1.23", "Максимальная precision и scale")]
[TestCase("12.3", "Граница precision")]
[TestCase("0.12", "Граница scale")]
+ [TestCase("1,23", "Запятая в качестве разделителя")]
public void IsValidNumber_WithValidPrecisionAndScale_ReturnsTrue(string number, string description)
{
var strictValidator = new NumberValidator(3, 2);
strictValidator.IsValidNumber(number).Should().BeTrue(description);
}
-
-
- [TestCase("123.4", "Превышение precision в целой части")]
- public void IsValidNumber_WithExceededPrecisionAndScale_ReturnsFalse(string number, string description)
- {
- var strictValidator = new NumberValidator(3, 2);
-
- strictValidator.IsValidNumber(number).Should().BeFalse(description);
- }
- [Test]
- public void IsValidNumber_WithOnlyPositiveTrue_RejectsNegativeNumbers()
- {
- var positiveOnly = new NumberValidator(5, 2, true);
- positiveOnly.IsValidNumber("-1.23").Should().BeFalse("Только положительные: отрицательное число");
- }
- [Test]
- public void IsValidNumber_WithOnlyPositiveFalse_AcceptsAllSigns()
+ [TestCase("-1.23", "Отрицательное число")]
+ [TestCase("-0", "Отрицательный ноль")]
+ public void IsValidNumber_WithOnlyPositiveFalse_AcceptsNegativeNumbers(string number, string description)
{
- var anyNum = new NumberValidator(5, 2, false);
+ var anyNum = new NumberValidator(5, 2, false);
- anyNum.IsValidNumber("-1.23").Should().BeTrue("Отрицательное число");
- anyNum.IsValidNumber("+1.23").Should().BeTrue("Положительное число с плюсом");
- anyNum.IsValidNumber("1.23").Should().BeTrue("Положительное число без плюсом");
- anyNum.IsValidNumber("-0").Should().BeTrue("Отрицательный ноль");
+ anyNum.IsValidNumber(number).Should().BeTrue(description);
}
@@ -94,11 +79,4 @@ public void IsValidNumber_WithInvalidFormats_ReturnsFalse(string number, string
validator.IsValidNumber(number).Should().BeFalse(description);
}
- [TestCase("12,34", "Запятая в качестве разделителя")]
- public void IsValidNumber_WithCommaAsSeparator_ReturnsTrue(string number, string description)
- {
- var validator = new NumberValidator(10, 2);
-
- validator.IsValidNumber(number).Should().BeTrue(description);
- }
}
\ No newline at end of file