Skip to content
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

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

WoeromProg
Copy link

@VladSavitskiy

using System.Text.RegularExpressions;
using FluentAssertions;
using NUnit.Framework;
using NUnit.Framework.Internal;

namespace HomeExercises
{
public class NumberValidatorTests
{
[Test]

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")]

Choose a reason for hiding this comment

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

Все изощренности с названиями нужны исключительно для читаемости будущих тестов. Ты определенно сделал шаг в этом направлении, надо только чуток докрутить.

  1. Базовая часть названия уже есть в названии метода, дублировать её просто не имеет смысла.
    image

Почему так? Читая тест кейсы в инспекторе, мы и так понимаем, что находимся внутри метода Creation_ShouldThrowArgumentException, поэтому дублирование только создает лишнюю когнитивную нагрузку. Также при переименовании метода, TestName автоматом не обновится, если это не сделает IDE

  1. Когда удалится дублирование, останутся фразы вида When..., от них на самом деле тоже можно избавиться, оставив только самую суть - что проверяет данный тесткейс

  2. Поправить нужно тут и во всех тестах ниже


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")]

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)

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")]

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

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")]

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

Copy link

@desolver desolver Nov 28, 2023

Choose a reason for hiding this comment

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

Понимаю, что этот файл создавал не ты, но быть может задумка автора как раз и была в том, чтобы с какими-то конвентами знакомить

В большом продакшене придется работать с тысячами файлов и классов, и всегда удобно, когда каждый класс, интерфейс, enum и тд лежит в своем собственном файле. Давай тут сделаем так же

Аналогично с соседним файлом

@@ -15,16 +15,9 @@ public void CheckCurrentTsar()
var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70,

Choose a reason for hiding this comment

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

Не могу почему-то написать комментарий парой строк выше)) Напишу тут - понятное ли название у теста?

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

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

Choose a reason for hiding this comment

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

Файл все ещё называется NumberValidatorTests)

new Person("Vasili III of Russia", 28, 170, 60, null));
}
}

public class Person

Choose a reason for hiding this comment

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

И тут название файла не совпадает с названием класса

Comment on lines 32 to 34
[TestCase(3, 2,"0,", TestName ="Aren'tDigitsAfterCommas")]
[TestCase(3, 2,"0.0.0", TestName = "ThreeDigitsInNumberByTwoDots")]
[TestCase(3, 2,"0,0,0", TestName = "ThreeDigitsInNumberByTwoCommas")]

Choose a reason for hiding this comment

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

Снова форматирование уехало

creation
.Should()
.NotThrow<Exception>();

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;

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)

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
Доработал нейминг тестов
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