Conversation
|
|
||
| actualTsar.Parent.Should().BeEquivalentTo(expectedTsar.Parent, options => | ||
| options.Excluding(t => t.Id) | ||
| .Excluding(t => t.Parent)); |
There was a problem hiding this comment.
Одна из основных задач тестов - грохнуться, если разработчик случайно (или намеренно) что-то сломал, дорабатывая функциональность. Представь, что в методе TsarRegistry.GetCurrentTsar() в качестве деда Ивана Грозного кто-то добавил Петра Первого - твой тест будет зелёным, а вот исходный вариант успешно покраснеет. Как бы ты исправил это?
There was a problem hiding this comment.
Нашел поле Path у IMemberInfo, в котором через метод EndWith, получается исключить Id у всех царей в цепочке и сделать проверку через один BeEquivalentTo. Но есть минус: если вдруг при расширении появится другое Id (например, DynastyId), то исключится и оно
Одна из основных задач тестов - грохнуться, если разработчик случайно (или намеренно) что-то сломал, дорабатывая функциональность. Представь, что в методе
TsarRegistry.GetCurrentTsar()в качестве деда Ивана Грозного кто-то добавил Петра Первого - твой тест будет зелёным, а вот исходный вариант успешно покраснеет. Как бы ты исправил это?
There was a problem hiding this comment.
Слишком глубоко копаешь, я пытаюсь тебя на гораздо более простую мысль натолкнуть. Кмк, оставить нерекурсивную проверку ок, потому что сейчас проверяемый метод содержит только отца и сына, но тест не проверяет ничего сверх этого. Как минимум, хотелось бы, чтобы тест просто грохнулся, если вдруг появился дед (неважно, с прадедом или без). Это простое и дешевое решение, и я уверен, что в реальном проекте средний программист в вакууме написал бы именно так.
Но раз уж ты заговорил про рекурсивную проверку, то подумай еще, как исключить поле Id на произвольной глубине. Намекну - EndsWith плох ещё и тем, что ты туда строку передаёшь, т.е. хардкодишь имя поля.
There was a problem hiding this comment.
EndsWith плох ещё и тем, что ты туда строку передаёшь, т.е. хардкодишь имя поля.
Здесь неудачно выразился. Здесь главное, что хардкодить имя поля, например, "Id" при передаче в тот же EndsWith неправильно, т.к. оно может измениться. В общем, намёк всё жирнее становится :)
There was a problem hiding this comment.
если брать имя поля через nameof, то это безопаснее, т.к. в случае если имя поля поменяется, то тест у нас просто не запустится
EndsWith плох ещё и тем, что ты туда строку передаёшь, т.е. хардкодишь имя поля.
Здесь неудачно выразился. Здесь главное, что хардкодить имя поля, например, "Id" при передаче в тот же EndsWith неправильно, т.к. оно может измениться. В общем, намёк всё жирнее становится :)
…о проверить прошлых царей
No description provided.