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

Галичев Артем #213

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

Conversation

S4MPAI
Copy link

@S4MPAI S4MPAI commented Dec 9, 2024

Choose a reason for hiding this comment

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

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

Может быть на текущем объеме это будет незаметно, но когда у тебя проект на сотни тысяч строк кода и сотни тестов на него, становится уже заметнее))

@@ -5,6 +5,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="8.0.0-alpha.1" />

Choose a reason for hiding this comment

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

Не сильно важный коммент, но альфы в рабочее решение тащить опасненько

Comment on lines 21 to 26
typeof(int),
typeof(double),
typeof(float),
typeof(string),
typeof(DateTime),
typeof(TimeSpan)

Choose a reason for hiding this comment

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

Ещё забыл всякие uint, ulong, short и тд.

Но есть более простой способ узнать, является ли тип простым, не перечисляя все вариации простых типов
Небольшая подсказка: посмотри в сторону класса Type

return this;
}

public PrintingConfig<TOwner> Excluding<TProperty>(Expression<Func<TOwner, TProperty>> memberSelector)

Choose a reason for hiding this comment

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

Сейчас у тебя возможно исключить только свойства класса, а на полях сериализация ломается. Попробуй в классе PersonWithParent сделать Id полем - тесты отвалятся, хотя поведение должно быть то же

Comment on lines 14 to 17
public Dictionary<Type, Func<object, string>> TypeSerializers { get; } = [];
public Dictionary<Type, CultureInfo> Cultures { get; } = [];
public Dictionary<PropertyInfo, Func<object, string>> PropertySerializers { get; } = [];
public Dictionary<PropertyInfo, int> PropertiesMaxLength { get; } = [];

Choose a reason for hiding this comment

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

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

var person = new Person { Name = "John", Age = 25, Height = 175};

var actualResult = ObjectPrinter.For<Person>().PrintToString(person);
var expectedResult = "Person\r\n\tId = Guid\r\n\tName = John\r\n\tHeight = 175\r\n\tAge = 25\r\n";

Choose a reason for hiding this comment

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

На линуксе и макос твои тесты будут падать из-за \r\n (переноса строки на винде). Причем в коде ты юзаешь Environment.NewLine, а тут почему-то захардкодил явно значения

Относится ко всем тестам


namespace ObjectPrinting.Tests;

[TestFixture]

Choose a reason for hiding this comment

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

[TestFixture] можно не писать, nunit и так поймет, что это класс с тестами по наличию [Test] или [TestCase] внутри него

}

[Test]
public void PrintToString_ShouldReturnSerializedPerson_WithExcludedId()

Choose a reason for hiding this comment

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

Тут скорее не WithExcludedId, а WithExcludedProperty, чтобы более явно кейс из требований обозначить

namespace ObjectPrinting.Tests;

[TestFixture]
public class ObjectPrinterTests

Choose a reason for hiding this comment

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

Классно поработал над покрытием тестами 🔥

public class ObjectPrinterTests
{
[Test]
public void PrintToString_ShouldReturnSerializedPerson_WithAllProperties()

Choose a reason for hiding this comment

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

Есть корректировка по именованию тестов. В целом ты правильно выделил первые две части нейминга - метод и что он должен сделать, но сейчас нет последней части - а при каких условиях это происходит

Например, на этом тесте разберем

PrintToString - тестируемый метод
ShouldReturnSerializedPerson - что долежн вернуть. Окей, должен вернуть сериализованный класс
WithAllProperties - "со всеми свойствами". Но разве это условия выполнения? Это скорее дополнение к предыдущему пункту "Должен вернуть сериализованный класс со всеми свойствами"

То есть нет третьей части PrintToString_ShouldSerializeClassWithAllProperties_When...() (подсократил сразу, чтобы побольше влезло в when)

{
public static PrintingConfig<TOwner> MaxLength<TOwner>(
this PropertyPrintingConfig<TOwner, string> propertyPrintingConfig,
int maxLen)

Choose a reason for hiding this comment

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

Давай уж допишем maxLength))

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