Conversation
…в NumberValidator
| { | ||
| public class NumberValidatorTests | ||
| { | ||
| [Test] |
There was a problem hiding this comment.
Если есть TestCase, то [Test] писать не нужно, это почти синонимы. Тут и во всех тестах ниже
| { | ||
| [Test] | ||
| public void Test() | ||
| [TestCase(-1, 2, true, TestName = "Creation_ShouldThrowArgumentException_WhenNegativePrecision")] |
There was a problem hiding this comment.
Все изощренности с названиями нужны исключительно для читаемости будущих тестов. Ты определенно сделал шаг в этом направлении, надо только чуток докрутить.
Почему так? Читая тест кейсы в инспекторе, мы и так понимаем, что находимся внутри метода Creation_ShouldThrowArgumentException, поэтому дублирование только создает лишнюю когнитивную нагрузку. Также при переименовании метода, TestName автоматом не обновится, если это не сделает IDE
-
Когда удалится дублирование, останутся фразы вида
When..., от них на самом деле тоже можно избавиться, оставив только самую суть - что проверяет данный тесткейс -
Поправить нужно тут и во всех тестах ниже
| [Test] | ||
| public void Test() | ||
| [TestCase(-1, 2, true, TestName = "Creation_ShouldThrowArgumentException_WhenNegativePrecision")] | ||
| [TestCase(0,0,true, TestName = "Creation_ShouldThrowArgumentException_WhenPrecisionIsZero")] |
There was a problem hiding this comment.
Форматирование немного поехало, между аргументами нет пробелов. Важная штука, не забывай перед сдачей на ревью
| [TestCase(0,0,true, TestName = "Creation_ShouldThrowArgumentException_WhenPrecisionIsZero")] | ||
| [TestCase(3,-1,true, TestName = "Creation_ShouldThrowArgumentException_WhenNegativeScale")] | ||
| [TestCase(1,2,true, TestName = "Creation_ShouldThrowArgumentException_WhenScaleIsGreaterThanPrecision")] | ||
| public void Creation_ShouldThrowArgumentException(int precision, int scale, bool onlyPositive) |
There was a problem hiding this comment.
Для чего в тесте аргумент onlyPositive, если он всегда равен true?
| [TestCase(-1, 2, true, TestName = "Creation_ShouldThrowArgumentException_WhenNegativePrecision")] | ||
| [TestCase(0,0,true, TestName = "Creation_ShouldThrowArgumentException_WhenPrecisionIsZero")] | ||
| [TestCase(3,-1,true, TestName = "Creation_ShouldThrowArgumentException_WhenNegativeScale")] | ||
| [TestCase(1,2,true, TestName = "Creation_ShouldThrowArgumentException_WhenScaleIsGreaterThanPrecision")] |
There was a problem hiding this comment.
Не хватает ещё одного граничного, очень похожего на этот ))
|
|
||
| namespace HomeExercises | ||
| { | ||
| public class NumberValidatorTests |
There was a problem hiding this comment.
Во всех методах этого класса потерялась часть, означающая "при каком условии выполняется действие", то есть часть, начинающаяся на _When.... В случае с TestCase желательно обобщить все тесткейсы под одно выражение и записать его в название метода, а сами тесткейсы уже будут пояснять детали своими названиями
| validator.IsValidNumber(number).Should().BeFalse(); | ||
| } | ||
| [Test] | ||
| [TestCase(17, 2, true, "0.0", TestName = "IsValidNumber_ReturnTrueWhenNumberWithFractionalPart")] |
There was a problem hiding this comment.
Точно ли здесь учтены все случаи корректной работы метода?
| validator.IsValidNumber(number).Should().BeTrue(); | ||
| } | ||
| } | ||
|
|
There was a problem hiding this comment.
Понимаю, что этот файл создавал не ты, но быть может задумка автора как раз и была в том, чтобы с какими-то конвентами знакомить
В большом продакшене придется работать с тысячами файлов и классов, и всегда удобно, когда каждый класс, интерфейс, enum и тд лежит в своем собственном файле. Давай тут сделаем так же
Аналогично с соседним файлом
cs/HomeExercises/ObjectComparison.cs
Outdated
| @@ -15,16 +15,9 @@ public void CheckCurrentTsar() | |||
| var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70, | |||
There was a problem hiding this comment.
Не могу почему-то написать комментарий парой строк выше)) Напишу тут - понятное ли название у теста?
cs/HomeExercises/ObjectComparison.cs
Outdated
| @@ -15,16 +15,9 @@ public void CheckCurrentTsar() | |||
| var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70, | |||
| new Person("Vasili III of Russia", 28, 170, 60, null)); | |||
There was a problem hiding this comment.
Замени здесь Василия 3, на Василия 2 и прогони тест, ожидаемое ли это поведение?
Переписал тест с одним testCase Перенёс тесты в отдельные файлы Добавил тест в Creation_ShouldThrowArgumentException Убрал параметр OnlyPositive Изменил тест для проверки царя
| } | ||
| } | ||
|
|
||
| public class NumberValidator |
There was a problem hiding this comment.
Файл все ещё называется NumberValidatorTests)
cs/HomeExercises/ObjectComparison.cs
Outdated
| } | ||
| } | ||
|
|
||
| public class Person |
There was a problem hiding this comment.
И тут название файла не совпадает с названием класса
| [TestCase(3, 2,"0,", TestName ="Aren'tDigitsAfterCommas")] | ||
| [TestCase(3, 2,"0.0.0", TestName = "ThreeDigitsInNumberByTwoDots")] | ||
| [TestCase(3, 2,"0,0,0", TestName = "ThreeDigitsInNumberByTwoCommas")] |
| creation | ||
| .Should() | ||
| .NotThrow<Exception>(); | ||
|
|
| using FluentAssertions; | ||
| using NUnit.Framework; | ||
| using NUnit.Framework.Internal; | ||
|
|
| [TestCase(3, 2, "-1.23", TestName = "NumberNegativeInNumberOnlyPositive")] | ||
| [TestCase(17, 2, "0.000", TestName = "NumberScaleGreaterThanValidatorScale")] | ||
| [TestCase(17, 2, "a.sd", TestName = "IncorrectNumberFormatBecauseLettersArePresent")] | ||
| public void IsValidNumber_False(int precision, int scale, string number) |
There was a problem hiding this comment.
Все ещё нет глагола перед False и True тут и ниже, вспомни про порядок именований в тестах
Method_Should..._When...
Добавил по тесту с onlyPositive = true Доработал нейминг тестов

@VladSavitskiy