Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 14 additions & 13 deletions Testing/Basic/Homework/1. ObjectComparison/ObjectComparison.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using NUnit.Framework;
using FluentAssertions;
using NUnit.Framework;
using NUnit.Framework.Constraints;
using NUnit.Framework.Legacy;

namespace HomeExercise.Tasks.ObjectComparison;
Expand All @@ -13,17 +15,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);

expectedTsar.Should().BeEquivalentTo(actualTsar, options => options
.Excluding(p => p.Id)
.Excluding(p => p.Parent));

expectedTsar.Parent.Should().BeEquivalentTo(actualTsar.Parent, options => options
.Excluding(p => p.Id)
.Excluding(p => p.Weight));
}

[Test]
Expand All @@ -34,7 +33,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));
}

Expand Down
60 changes: 41 additions & 19 deletions Testing/Basic/Homework/2. NumberValidator/NumberValidatorTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@

using FluentAssertions;
using FluentAssertions.Execution;
using NUnit.Framework;
using NUnit.Framework.Legacy;

Expand All @@ -7,25 +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<ArgumentException>(() => new NumberValidator(-1, 2, true));
Assert.DoesNotThrow(() => new NumberValidator(1, 0, true));
Assert.Throws<ArgumentException>(() => 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"));
var numberValidatorConstructor = () => new NumberValidator(precision, scale, onlyPositive);
numberValidatorConstructor.Should().Throw<ArgumentException>();
}

[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<ArgumentException>();
}

[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);

@Inree Inree Oct 29, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подушню. Вместо отдельного параметра Expected можно использовать ExpectedResult, встроенный в атрибут TestCase. То есть ты можешь описать

TestCase(17, 2, true, "0.0", ExpectedResult = true)
bool Test(parameters)
{
return TestedModule.TestedMethod(parameters);
}

}
}