Савицких Антон - #52
Conversation
| .Excluding(t => t.Id) | ||
| .Excluding(t => t.Parent.Id)); |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| [Test] | ||
| public void NumberValidator_ThrowsException_WithNegativePrecision() | ||
| { | ||
| Assert.Throws<ArgumentException>(() => new NumberValidator(-1, 2, true)); |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Точно, забыл что так можно. Чтобы убедиться что тест падает там где ожидается проходил по нему отладчиком, учту при доработке
| } | ||
|
|
||
| [TestFixture] | ||
| public class NumberValidatorIsValidMethodPrecisionAndScaleTests |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Согласен, изначально планировал что буду группировать методы и использовать [TestCase], потому что создание отдельного теста под каждый случай выглядело избыточным, но остановился на этом подходе из-за того что в условиях к задаче была формулировка "при падении теста было без стек-трейса понятно на каких данных код не работает".
[TestCase] конечно выводит информацию о том что на каких данных тест упал, но для этого как раз надо было смотреть что ты получил на выводе, а это как я понял делать было нельзя, поэтому разбивал все на много отдельных тестов с подробными названиями и группировал по классам чтобы ориентироваться было хотя бы немного проще.
Возможно я не до конца понял формулировку этого конкретного условия про стек-трейс, если бы его не было, я бы пользовался [TestCase]
| [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.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
В классе NumberValidator есть поля precision и scale
precision определяет полную точность числа (сколько всего знаков, учитывая знак '+' и '-' если он есть, может быть у нашего числа без учета разделяющей десятичной точки).
scale определяет сколько максимум знаков в дробной части (после разделяющей десятичной точки) может быть в нашем числе
Сами тесты проверяют 2 ситуации:
- можем ли мы втиснуть число в котором количество знаков равно пороговому значению precision,
- число которое в целом до максимальной допустимой точности не доходит, но у которого его дробная часть равна пороговому значению scale
| public void IsValidNumber_ReturnsTrue_WithNumberWithNegativeSignOfValidPrecision() | ||
| { | ||
| ClassicAssert.IsTrue(new NumberValidator(5, 3, false).IsValidNumber("-1.23")); | ||
| } |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Данный тест находится в классе 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.
This comment was marked as resolved.
Sorry, something went wrong.
| Age = age; | ||
| Height = height; | ||
| Weight = weight; | ||
| Parent = parent; |
@ksamnole