-
Notifications
You must be signed in to change notification settings - Fork 282
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Трофимов Никита #239
base: master
Are you sure you want to change the base?
Трофимов Никита #239
Conversation
…в NumberValidator
using System.Text.RegularExpressions; | ||
using FluentAssertions; | ||
using NUnit.Framework; | ||
using NUnit.Framework.Internal; | ||
|
||
namespace HomeExercises | ||
{ | ||
public class NumberValidatorTests | ||
{ | ||
[Test] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Если есть TestCase
, то [Test]
писать не нужно, это почти синонимы. Тут и во всех тестах ниже
|
||
namespace HomeExercises | ||
{ | ||
public class NumberValidatorTests | ||
{ | ||
[Test] | ||
public void Test() | ||
[TestCase(-1, 2, true, TestName = "Creation_ShouldThrowArgumentException_WhenNegativePrecision")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Все изощренности с названиями нужны исключительно для читаемости будущих тестов. Ты определенно сделал шаг в этом направлении, надо только чуток докрутить.
Почему так? Читая тест кейсы в инспекторе, мы и так понимаем, что находимся внутри метода Creation_ShouldThrowArgumentException
, поэтому дублирование только создает лишнюю когнитивную нагрузку. Также при переименовании метода, TestName автоматом не обновится, если это не сделает IDE
-
Когда удалится дублирование, останутся фразы вида
When...
, от них на самом деле тоже можно избавиться, оставив только самую суть - что проверяет данный тесткейс -
Поправить нужно тут и во всех тестах ниже
|
||
namespace HomeExercises | ||
{ | ||
public class NumberValidatorTests | ||
{ | ||
[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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Форматирование немного поехало, между аргументами нет пробелов. Важная штука, не забывай перед сдачей на ревью
[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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Для чего в тесте аргумент 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не хватает ещё одного граничного, очень похожего на этот ))
using System.Text.RegularExpressions; | ||
using FluentAssertions; | ||
using NUnit.Framework; | ||
using NUnit.Framework.Internal; | ||
|
||
namespace HomeExercises | ||
{ | ||
public class NumberValidatorTests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Во всех методах этого класса потерялась часть, означающая "при каком условии выполняется действие", то есть часть, начинающаяся на _When...
. В случае с TestCase
желательно обобщить все тесткейсы под одно выражение и записать его в название метода, а сами тесткейсы уже будут пояснять детали своими названиями
validator.IsValidNumber(number).Should().BeFalse(); | ||
} | ||
[Test] | ||
[TestCase(17, 2, true, "0.0", TestName = "IsValidNumber_ReturnTrueWhenNumberWithFractionalPart")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Точно ли здесь учтены все случаи корректной работы метода?
public void IsValidNumber_True(int precision, int scale, bool onlyPositive, string number) | ||
{ | ||
NumberValidator validator = new NumberValidator(precision, scale, onlyPositive); | ||
validator.IsValidNumber(number).Should().BeTrue(); | ||
} | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Понимаю, что этот файл создавал не ты, но быть может задумка автора как раз и была в том, чтобы с какими-то конвентами знакомить
В большом продакшене придется работать с тысячами файлов и классов, и всегда удобно, когда каждый класс, интерфейс, 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не могу почему-то написать комментарий парой строк выше)) Напишу тут - понятное ли название у теста?
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Замени здесь Василия 3, на Василия 2 и прогони тест, ожидаемое ли это поведение?
Переписал тест с одним testCase Перенёс тесты в отдельные файлы Добавил тест в Creation_ShouldThrowArgumentException Убрал параметр OnlyPositive Изменил тест для проверки царя
validator.IsValidNumber(number).Should().BeTrue(); | ||
} | ||
} | ||
|
||
public class NumberValidator |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Файл все ещё называется NumberValidatorTests
)
cs/HomeExercises/ObjectComparison.cs
Outdated
new Person("Vasili III of Russia", 28, 170, 60, null)); | ||
} | ||
} | ||
|
||
public class Person |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
И тут название файла не совпадает с названием класса
[TestCase(3, 2,"0,", TestName ="Aren'tDigitsAfterCommas")] | ||
[TestCase(3, 2,"0.0.0", TestName = "ThreeDigitsInNumberByTwoDots")] | ||
[TestCase(3, 2,"0,0,0", TestName = "ThreeDigitsInNumberByTwoCommas")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Снова форматирование уехало
creation | ||
.Should() | ||
.NotThrow<Exception>(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лишняя строка пустая
using FluentAssertions; | ||
using NUnit.Framework; | ||
using NUnit.Framework.Internal; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тоже лишняя пустая строка
[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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Все ещё нет глагола перед False и True тут и ниже, вспомни про порядок именований в тестах
Method_Should..._When...
Добавил по тесту с onlyPositive = true Доработал нейминг тестов
@VladSavitskiy