Conversation
|
При коммите старайся описывать смысл изменений. |
Homework/ObjectEqualityComparer.cs
Outdated
|
|
||
| namespace Homework; | ||
|
|
||
| public class ObjectEqualityComparer : IEqualityComparer<object> |
There was a problem hiding this comment.
Может стоит в названии класса отразить что он сравнивает по ссылке? Иначе потом забудется и придется в эту реализацию проваливаться чтобы узнать как она сравнивает.
| @@ -0,0 +1,259 @@ | |||
| using FluentAssertions; | |||
There was a problem hiding this comment.
Давай вынесем тесты в отдельный проект?
А то потом захочется использовать код как библиотеку и тесты поедут вместе с кодом куда-нибудь на боевую площадку.
| .Printing<int>().Using(i => i.ToString("X")) | ||
| //3. Для числовых типов указать культуру | ||
| .Printing<double>().Using(CultureInfo.InvariantCulture) | ||
| //4. Настроить сериализацию конкретного свойства |
There was a problem hiding this comment.
Тут, кажется, не хватает настройки сериализации для конкретного свойства.
Homework/PropertyPrintingConfig.cs
Outdated
|
|
||
| public PrintingConfig<TOwner> Using(CultureInfo culture) | ||
| { | ||
| if (typeof(TPropType).GetMethod("ToString", [typeof(IFormatProvider)]) is null) |
There was a problem hiding this comment.
Можем как-нибудь поэлегантнее проверить и, желательно, не в рантайме чтобы падало, а еще на этапе компиляции?
| { | ||
| var lambda = memberSelector as LambdaExpression; | ||
| var visitor = new LastMemberVisitor(); | ||
| visitor.Visit(lambda.Body); |
There was a problem hiding this comment.
Интересно, зачем поход в Visitor?
| var expected = | ||
| $""" | ||
| Person | ||
| {"\t"}Age = {person.Age} |
There was a problem hiding this comment.
У меня тестики разваливаются, пишут что "Expected \r\n, Actual \n"
| namespace HomeworkTests; | ||
|
|
||
| public class Person | ||
| { |
There was a problem hiding this comment.
У меня StackOverflow в тестах, если я поле с базовым типом enum добавляю.
| } | ||
|
|
||
| [Test] | ||
| public void Should_ExcludeParticularPropertyOrField() |
There was a problem hiding this comment.
Интересно, а мы сумеем исключить вложенное поле?
Person.Address.Street например.
| toStringMethod?.DeclaringType == type; | ||
| } | ||
|
|
||
| HashSet<Type> IPrintingConfig.ExcludeTypes { get; } = []; |
There was a problem hiding this comment.
Можешь рассказать почему выбрал такое решение (с интерфейсом)?
Какие плюсы/минусы по сравнению с альтернативами?
| {"\t"}Parent = {person.Parent?.ToString() ?? "null"} | ||
| {"\t"}Weight = {person.Weight} | ||
|
|
||
| """; |
There was a problem hiding this comment.
А если для какого-нибудь теста нам надо будет еще поле в объект добавить, то это каждый тест придется поправить?
| [Test] | ||
| public void Should_ExcludePropertyOrFieldWithParticularType() | ||
| { | ||
| var person = CreatePerson(); |
There was a problem hiding this comment.
Если я пробую иерархию Person1->Person2->Person2, то мне Person2 совсем не выводит, даже раз.
@LevShisterov