Skip to content

Медведев Фома, ДЗ по тестированию - #44

Open
Kpokoko wants to merge 2 commits into
kontur-courses:masterfrom
Kpokoko:master
Open

Медведев Фома, ДЗ по тестированию#44
Kpokoko wants to merge 2 commits into
kontur-courses:masterfrom
Kpokoko:master

Conversation

@Kpokoko

@Kpokoko Kpokoko commented Oct 27, 2025

Copy link
Copy Markdown

Изменил тест в ObjectComparison, реализовав проверку через FluentAssertions.BeEquivalentTo()

Переделал тест в NumberValidatorTests, сделав его через генераторы и имена для тестов, добавил своих

@OvchinnikovNikita

…rtions.BeEquivalentTo()

Переделал тест в NumberValidatorTests, сделав его через генераторы и имена для тестов, добавил своих

@OvchinnikovNikita OvchinnikovNikita left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Общий комментарий:

  1. Правок по задаче мало, но даже в таких случаях хорошим тоном было бы залить решение не одним коммитом, а, например, двумя: в одном изменения ObjectComparison, в другом - NumberValidator. В следующих задачах давай делать коммиты более атомарными (но не переусердствуй с этим).
  2. Продолжение пункта 1: сообщение к коммиту у тебя получилось довольно большое. Давай в будущем стараться делать их более строгими и лаконичными, но четко отражающими суть изменений (более атомарные коммиты поспособствуют этому). Я понимаю, что это похоже на урок русского языка в школе, но всё же такое оформление коммитов сильно упрощает другим разработчикам процесс погружения в контекст того, как шла разработка. Да, текущая задача маленькая, но представляешь, что может быть в реальных продуктовых проектах?)

@@ -0,0 +1,13 @@
# Default ignored files

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Расскажи, что это за правки и зачем они нужны в рамках данной задачи?)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

При первом запуске Testing.sln через Rider появилась папка с этими файлами, надо было её в .gitignore положить, как папку .vs, упустил этот момент

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Сейчас можно так оставить, но в следующий раз старайся делать PR чистыми - без лишних изменений

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Расскажи, что это за правки и зачем они нужны в рамках данной задачи?)

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Расскажи, что это за правки и зачем они нужны в рамках данной задачи?)

@@ -0,0 +1,8 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Расскажи, что это за правки и зачем они нужны в рамках данной задачи?)

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

actualTsar.Should().BeEquivalentTo(expectedTsar, config => config.Excluding(x => x.Id).Excluding(x => x.Parent.Id));
// Я специально для теста добавил одно поле, а сам тест остался неизменен. По сути, его нужно изменять только в случае, если нужно добавить какое-то поле в игнор

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

На будущее отмечу: в рамках учебных заданий это ОК, но в реальных проектах комментарии, адресованные ревьюеру, обычно оставляют в github/gitlab и т.д.

@Kpokoko Kpokoko Oct 30, 2025

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

А как следует оставлять комментарии в github? В pull request их добавлять, или как-то иначе?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

В pull request. При этом оставлять поясняющие комментарии в коде - это нормальная практика, если ты хочешь, чтобы этот комментарий остался в коде "навсегда" и предназначался для всех разработчиков, с которыми ты работаешь над одним кодом. В нашем же случае ты оставлял комментарий для наставника - просто, чтобы я его увидел и имел ввиду. Такое лучше не оставлять в коде, а выносить в pull request (или merge request в случае с gitlab, с которым если ещё не сталкивался, то обязательно столкнешься)

var expectedTsar = new Person("Ivan IV The Terrible", 54, 170, 70, 99999999,
new Person("Vasili III of Russia", 28, 170, 60, 99999999, null));

actualTsar.Should().BeEquivalentTo(expectedTsar, config => config.Excluding(x => x.Id).Excluding(x => x.Parent.Id));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

  1. Строчка довольно длинная. Как думаешь, можно ли её отформатировать и сделать эту строчку более читаемой?
  2. Мелочь, но всё же: точно ли x - подходящее название переменной в данном контексте? Может можно сделать лучше?

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

// Какие недостатки у такого подхода?
// Этот код более читаем, чем был изначальный вариант в первом тесте, но его необходимо будет изменять каждый раз, когда мы будем менять класс, который тестируем

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Давай ещё раз проведём сравнение и аккуратно, но развернуто распишем (оставь комментарий здесь или в коде):

  1. В чём плюсы/минусы изначального подхода в тесте CheckCurrentTsar?
  2. В чём плюсы/минусы альтернативного решения в CheckCurrentTsar_WithCustomEquality?
  3. В чём плюсы/минусы твоего решения?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

  1. Плюсом оригинального подхода можно назвать то, что такой тест можно быстро написать просто для того, чтобы оперативно и один раз убедиться, что что-то работает. Его проблема в том, что такой тест очень сложно поддерживать: если вдруг мы будем менять поля тестируемого класса, то нам придётся вручную добавлять эти поля в тесте. К тому же, такой тест не очень удобно читается из-за большого количества сравнений.
  2. Альтернативное решение оставляет в себе проблему расширяемости теста, поэтому нам также, как и раньше, придётся вручную добавлять или убирать поля при изменении тестируемого класса, но он более читаемый, потому что сравнение вынесено в отдельный метод. К тому же в этом решении сравнение вложенных экземпляров класса происходит через AreEqual, а не по каждому полю как в 1 варианте, что тоже явно плюс.
  3. В моём решении сравнение в тесте происходит при помощи метода из FluentAssertions, в котором объекты автоматически сравниваются по всем полям, поэтому тест будет работать даже если изменить поля тестируемых классов. Единственный минус - необходимость исключать те поля, которые будут уникальными для каждого объекта, чтобы сравнение их пропускало.

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