Skip to content

Савицких Антон - #52

Open
Xineev wants to merge 2 commits into
kontur-courses:masterfrom
Xineev:master
Open

Савицких Антон#52
Xineev wants to merge 2 commits into
kontur-courses:masterfrom
Xineev:master

Conversation

@Xineev

@Xineev Xineev commented Oct 28, 2025

Copy link
Copy Markdown

Comment on lines +35 to +36
.Excluding(t => t.Id)
.Excluding(t => t.Parent.Id));

This comment was marked as resolved.

[Test]
public void NumberValidator_ThrowsException_WithNegativePrecision()
{
Assert.Throws<ArgumentException>(() => new NumberValidator(-1, 2, true));

This comment was marked as resolved.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Точно, забыл что так можно. Чтобы убедиться что тест падает там где ожидается проходил по нему отладчиком, учту при доработке

}

[TestFixture]
public class NumberValidatorIsValidMethodPrecisionAndScaleTests

This comment was marked as resolved.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Согласен, изначально планировал что буду группировать методы и использовать [TestCase], потому что создание отдельного теста под каждый случай выглядело избыточным, но остановился на этом подходе из-за того что в условиях к задаче была формулировка "при падении теста было без стек-трейса понятно на каких данных код не работает".
[TestCase] конечно выводит информацию о том что на каких данных тест упал, но для этого как раз надо было смотреть что ты получил на выводе, а это как я понял делать было нельзя, поэтому разбивал все на много отдельных тестов с подробными названиями и группировал по классам чтобы ориентироваться было хотя бы немного проще.
Возможно я не до конца понял формулировку этого конкретного условия про стек-трейс, если бы его не было, я бы пользовался [TestCase]

Comment on lines +85 to +95
[Test]
public void IsValidNumber_ReturnsTrue_WithNumberAtLimitPrecision()
{
ClassicAssert.IsTrue(new NumberValidator(4, 3, true).IsValidNumber("12.34"));
}

[Test]
public void IsValidNumber_ReturnsTrue_WithNumberAtLimitScale()
{
ClassicAssert.IsTrue(new NumberValidator(5, 3, true).IsValidNumber("1.234"));
}

This comment was marked as resolved.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

В классе NumberValidator есть поля precision и scale
precision определяет полную точность числа (сколько всего знаков, учитывая знак '+' и '-' если он есть, может быть у нашего числа без учета разделяющей десятичной точки).
scale определяет сколько максимум знаков в дробной части (после разделяющей десятичной точки) может быть в нашем числе
Сами тесты проверяют 2 ситуации:

  1. можем ли мы втиснуть число в котором количество знаков равно пороговому значению precision,
  2. число которое в целом до максимальной допустимой точности не доходит, но у которого его дробная часть равна пороговому значению scale

Comment on lines +149 to +152
public void IsValidNumber_ReturnsTrue_WithNumberWithNegativeSignOfValidPrecision()
{
ClassicAssert.IsTrue(new NumberValidator(5, 3, false).IsValidNumber("-1.23"));
}

This comment was marked as resolved.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Данный тест находится в классе NumberValidatorIsValidMethodWithNegativeSign, называется IsValidNumber_ReturnsFalse_WithNegativeNumberWhenOnlyPositivesAllowed

Если точно, то начиная со строки 179

У меня достаточно долго стояла дилемма в какой из классов его лучше вынести, решил что пусть будет со всеми тестами которые работают с отрицательными числами

[Test]
public void IsValidNumber_ReturnsTrue_WithZero()
{
ClassicAssert.IsTrue(new NumberValidator(3, 2, true).IsValidNumber("0"));

This comment was marked as resolved.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Да, тут сам не доглядел

Age = age;
Height = height;
Weight = weight;
Parent = parent;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

А зачем убрал?)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants