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

Draft: Рекомендации по написанию модульных тестов #414

Draft
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

alkoleft
Copy link
Member

@alkoleft alkoleft commented Sep 25, 2024

Описание изменений

Документация.

Материалы, которые помогут в написании и понимании модульных тестов.

Summary by CodeRabbit

  • Новые функции

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

    • Созданы новые документы, охватывающие практики юнит-тестирования и использование xUnit.

@alkoleft alkoleft added the documentation Документация по движку label Sep 25, 2024
Copy link

coderabbitai bot commented Sep 25, 2024

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

В данном пулл-реквесте добавлены новые документы, касающиеся практик модульного тестирования в среде .NET. Включены рекомендации по написанию тестов, обсуждение преимуществ использования xUnit и общие рекомендации по модульному тестированию. Каждый файл содержит примеры хороших и плохих практик, а также акцентирует внимание на важности ясности и надежности тестов.

Changes

Файл Изменение
documentation/docs/cook-book/recommendations/common-recommendations.md Добавлен файл с рекомендациями по модульному тестированию, включая лучшие практики и примеры.
documentation/docs/cook-book/recommendations/index.md Добавлен новый файл "Рекомендации по модульному тестированию".
documentation/docs/cook-book/recommendations/why-xunit.md Добавлен файл, обсуждающий важность и преимущества модульного тестирования.

Poem

В норке новой, в тишине,
Тесты пишем мы в веселье.
С rabbit'ом в команде, как всегда,
Код надежный — вот мечта!
Пусть каждый тест пройдет без бед,
И радость в сердце, как свет! 🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@alkoleft alkoleft changed the title Рекомендации по написанию модульных тестов Draft: Рекомендации по написанию модульных тестов Sep 25, 2024
@alkoleft alkoleft marked this pull request as draft September 25, 2024 21:30
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (10)
documentation/docs/cook-book/recommendations/why-xunit.md (6)

1-10: Рассмотрите возможность уточнения заголовка и примечания о переводе

Заголовок и метаданные файла хорошо структурированы. Однако есть несколько моментов, которые можно улучшить:

  1. Заголовок "Почему именно модульные тесты" можно сделать более конкретным, например: "Преимущества модульного тестирования с xUnit".

  2. В примечании о переводе есть повторение слова "Перевод". Предлагаю упростить его следующим образом:

:::tip Примечание
Адаптированный перевод (GPT) статьи [Unit testing best practices with .NET Core and .NET Standard](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices) от [John Reese](https://reese.dev/)
:::

Эти изменения сделают документ более четким и профессиональным.

🧰 Tools
LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...# Почему именно модульные тесты :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


12-18: Отличное введение и первый раздел

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

Предложение по улучшению: Рассмотрите возможность добавления краткого списка основных причин использования модульных тестов перед углублением в каждую из них. Это даст читателю общее представление о содержании документа.

Например:

Существует несколько ключевых причин использования модульных тестов:
- Сокращение времени функционального тестирования
- Защита от регрессии
- Создание исполняемой документации
- Уменьшение связности кода

Давайте рассмотрим каждую из них подробнее.

Это поможет читателю лучше понять структуру документа и основные преимущества модульного тестирования.


20-30: Отличные разделы о защите от регрессии и исполняемой документации

Оба раздела предоставляют четкие и информативные объяснения преимуществ модульного тестирования. Содержание точно и актуально, язык ясен и доступен.

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

Когда у вас есть набор модульных тестов с понятными названиями, каждый тест может четко объяснить ожидаемый результат для заданных входных данных. Например, тест с названием "GetUserName_WithEmptyInput_ReturnsDefaultName" ясно показывает, что метод должен возвращать имя по умолчанию, если входные данные пусты.

Это поможет читателям лучше понять, как именно модульные тесты могут служить исполняемой документацией.


32-36: Хороший раздел о меньшей связности кода

Этот раздел точно описывает, как модульное тестирование может привести к уменьшению связности кода. Объяснение краткое и понятное.

Предложение по улучшению: Рассмотрите возможность добавления краткого примера или более подробного объяснения, чтобы проиллюстрировать, как именно написание тестов приводит к меньшей связности кода. Например:

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

Такое дополнение поможет читателям лучше понять связь между модульным тестированием и уменьшением связности кода.


38-48: Отличный раздел о характеристиках хорошего модульного теста

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

Предложение по улучшению: Для повышения согласованности и читаемости рассмотрите возможность форматирования каждой характеристики как подзаголовка. Например:

## Характеристики хорошего модульного теста

### Быстрый
Не редкость, что у зрелых проектов есть тысячи модульных тестов. Модульные тесты должны выполняться за короткое время, в миллисекундах.

### Изолированный
Модульные тесты являются автономными, могут выполняться в изоляции и не зависят от каких-либо внешних факторов, таких как файловая система, внешние сервисы или база данных.

[и так далее для каждой характеристики]

Это улучшит структуру документа и сделает его более удобным для чтения и навигации.


50-54: Хороший раздел о кодовом покрытии с возможностью улучшения

Этот раздел предоставляет сбалансированный взгляд на кодовое покрытие, подчеркивая как его важность, так и ограничения. Объяснение ясное и информативное.

Предложения по улучшению:

  1. Рассмотрите возможность добавления краткого определения кодового покрытия в начале раздела для читателей, которые могут быть не знакомы с этим термином.

  2. Последнее предложение упоминает дополнительную информацию о покрытии кода, но не предоставляет её. Рекомендуется либо добавить эту информацию, либо предоставить ссылку на ресурс, где читатели могут найти более подробную информацию.

  3. Для улучшения структуры документа, рассмотрите возможность добавления подзаголовков в этом разделе. Например:

## Кодовое покрытие

### Что такое кодовое покрытие?
[Добавьте краткое определение]

### Связь между покрытием и качеством кода
[Существующий текст о связи между высоким покрытием и качеством]

### Ограничения кодового покрытия
[Существующий текст о потенциальных проблемах с чрезмерным фокусом на покрытии]

### Дополнительная информация
[Добавьте дополнительную информацию или ссылку на ресурс]

Эти изменения сделают раздел более информативным и структурированным.

documentation/docs/cook-book/recommendations/common-recommendations.md (4)

1-15: Хорошее начало документа!

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

Рекомендация по улучшению:

В строке 9 есть повторение слова "Перевод". Возможно, стоит немного изменить формулировку для улучшения читаемости.

Предлагаю изменить на:

-:::tip Перевод
-Перевод (gpt) и адаптация статьи [Unit testing best practices with .NET Core and .NET Standard](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices) by [John Reese](https://reese.dev/)
+:::tip О документе
+Перевод (с помощью GPT) и адаптация статьи [Unit testing best practices with .NET Core and .NET Standard](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices) by [John Reese](https://reese.dev/)
🧰 Tools
LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...ации по модульному тестированию :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


21-30: Хорошие рекомендации по именованию тестов!

Предложенная структура из трех частей для названия тестов очень полезна. Объяснение важности стандартов именования также добавляет ценности этому разделу.

Предложение по улучшению:

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

Например, можно добавить:

Пример названия теста:
"ВычислитьСумму_ПриОтрицательныхЧислах_ВозвращаетОтрицательныйРезультат"

54-97: Отличное объяснение паттерна "Подготовка, Действие, Проверка"!

Раздел хорошо структурирован и содержит важную информацию о правильной организации тестов. Примеры наглядно демонстрируют разницу между хорошими и плохими практиками.

Небольшое замечание:

В строке 187 есть небольшая грамматическая ошибка.

Предлагаю внести следующее изменение:

-При написании юнит-тестов старайтесь избегать ручной конкатенации строк, логических условий (таких как `Если`, `Пока`, `Для`, `#Если`) и других условий.
+При написании юнит-тестов старайтесь избегать ручной конкатенации строк, логических условий (таких, как `Если`, `Пока`, `Для`, `#Если`) и других условий.

185-465: Отличные рекомендации по улучшению качества модульных тестов!

Разделы "Избегайте логики в тестах", "Предпочитайте вспомогательные методы для настройки и очистки" и "Избегайте нескольких действий" содержат ценные советы, которые помогут разработчикам создавать более эффективные и понятные модульные тесты. Объяснения и примеры хорошо иллюстрируют каждую концепцию.

Небольшое замечание:

В строке 299 есть небольшая грамматическая ошибка.

Предлагаю внести следующее изменение:

-Тоже самое касается методов `ПередТестовымНабором` и `ПередВсемиТестами`.
+То же самое касается методов `ПередТестовымНабором` и `ПередВсемиТестами`.
🧰 Tools
LanguageTool

[uncategorized] ~187-~187: Пропущена запятая: «таких, как»
Context: ...конкатенации строк, логических условий (таких как Если, Пока, Для, #Если) и други...

(TAKOJ_KAK)


[uncategorized] ~299-~299: Пишется раздельно: «то же самое».
Context: ...одинаковые требования для всех тестов. Тоже самое касается методов ПередТестовымНабором...

(TO_JE)


[uncategorized] ~374-~374: Глаголы – однородные члены предложения: «завершается ошибкой, Гарантирует» или «завершается ошибкой и Гарантирует».
Context: ... * При сбое теста ясно, какой сценарий завершается ошибкой * Гарантирует, что тест сосредоточен только на одном ...

(Verb_comma_Verb)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 5d2258e and 5e70b12.

📒 Files selected for processing (3)
  • documentation/docs/cook-book/recommendations/common-recommendations.md (1 hunks)
  • documentation/docs/cook-book/recommendations/index.md (1 hunks)
  • documentation/docs/cook-book/recommendations/why-xunit.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • documentation/docs/cook-book/recommendations/index.md
🧰 Additional context used
LanguageTool
documentation/docs/cook-book/recommendations/common-recommendations.md

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...ации по модульному тестированию :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


[uncategorized] ~187-~187: Пропущена запятая: «таких, как»
Context: ...конкатенации строк, логических условий (таких как Если, Пока, Для, #Если) и други...

(TAKOJ_KAK)


[uncategorized] ~299-~299: Пишется раздельно: «то же самое».
Context: ...одинаковые требования для всех тестов. Тоже самое касается методов ПередТестовымНабором...

(TO_JE)


[uncategorized] ~374-~374: Глаголы – однородные члены предложения: «завершается ошибкой, Гарантирует» или «завершается ошибкой и Гарантирует».
Context: ... * При сбое теста ясно, какой сценарий завершается ошибкой * Гарантирует, что тест сосредоточен только на одном ...

(Verb_comma_Verb)

documentation/docs/cook-book/recommendations/why-xunit.md

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...# Почему именно модульные тесты :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)

🔇 Additional comments not posted (4)
documentation/docs/cook-book/recommendations/why-xunit.md (1)

1-54: Отличный документ о важности модульного тестирования

Этот документ предоставляет всесторонний обзор важности и преимуществ модульного тестирования. Он хорошо структурирован, информативен и охватывает ключевые аспекты темы, включая:

  1. Причины использования модульных тестов
  2. Характеристики хорошего модульного теста
  3. Обсуждение кодового покрытия

Содержание точно и актуально, а язык ясен и доступен. Документ будет ценным ресурсом для разработчиков, особенно для тех, кто новичок в модульном тестировании или нуждается в обосновании его важности.

Предложенные улучшения в основном касаются форматирования, добавления примеров и расширения некоторых объяснений. Реализация этих предложений сделает документ еще более полезным и удобным для чтения.

В целом, этот документ является отличным дополнением к документации проекта и поможет улучшить практики тестирования в команде.

🧰 Tools
LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...# Почему именно модульные тесты :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)

documentation/docs/cook-book/recommendations/common-recommendations.md (3)

17-19: Отличный совет по модульному тестированию!

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


100-143: Важный совет по написанию эффективных тестов!

Рекомендация писать минимально проходящие тесты очень ценна. Объяснение важности этого подхода и примеры хорошо иллюстрируют концепцию.


145-183: Отличный совет по улучшению читаемости тестов!

Рекомендация избегать "магических" строк в модульных тестах очень важна для повышения читаемости и поддерживаемости тестов. Объяснение важности этого подхода, примеры и дополнительный совет о выражении намерений делают этот раздел особенно ценным.

@alkoleft
Copy link
Member Author

@coderabbitai full review

Copy link

coderabbitai bot commented Sep 26, 2024

✅ Actions performed

Full review triggered.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Outside diff range and nitpick comments (6)
documentation/docs/cook-book/recommendations/common-recommendations.md (6)

1-15: Структура и содержание введения выглядят хорошо.

Документ имеет четкую структуру с правильно оформленным заголовком и вводной частью. Метаданные и контекст предоставлены корректно.

Исправьте повторение слова "Перевод".

В блоке с информацией о переводе есть небольшая опечатка.

Предлагаю внести следующее изменение:

-:::tip Перевод
-Перевод (gpt) и адаптация статьи [Unit testing best practices with .NET Core and .NET Standard](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices) by [John Reese](https://reese.dev/)
+:::tip Об этом документе
+Перевод (gpt) и адаптация статьи [Unit testing best practices with .NET Core and .NET Standard](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices) by [John Reese](https://reese.dev/)
🧰 Tools
🪛 LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...ации по модульному тестированию :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


21-52: Раздел о названиях тестов хорошо структурирован и информативен.

Содержание раздела полностью соответствует лучшим практикам именования тестов. Объяснение важности правильного именования и примеры наглядно демонстрируют разницу между плохими и хорошими практиками.

Предложение по улучшению "хорошего" примера.

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

Предлагаю внести следующее изменение:

-Процедура ДобавитьСтроку_БезДополнения_ВернетТужеСтроку() Экспорт
+Процедура ДобавитьСтроку_КогдаДополнениеПустаяСтрока_ВозвращаетИсходнуюСтрокуБезИзменений() Экспорт

Это изменение делает название теста еще более точным и описательным, что полностью соответствует рекомендациям, приведенным в этом разделе.


54-98: Раздел об организации тестов содержит ценную информацию и хорошие примеры.

Описание паттерна "Подготовка-Действие-Проверка" (AAA) точно и информативно. Примеры наглядно демонстрируют разницу между плохими и хорошими практиками организации тестов.

Исправьте грамматическую ошибку.

В разделе есть небольшая грамматическая ошибка.

Предлагаю внести следующее изменение:

-В метод `ПередКаждымТестом` вызывается перед каждым тестом в вашем наборе тестов.
+Метод `ПередКаждымТестом` вызывается перед каждым тестом в вашем наборе тестов.

Это изменение устраняет лишнее слово "В" в начале предложения, делая его грамматически корректным.


100-143: Раздел о минимально проходящих тестах содержит важную информацию и хорошие примеры.

Объяснение важности написания минимально проходящих тестов точно и информативно. Примеры наглядно демонстрируют разницу между избыточными и минимальными тестами.

Предложение помощи с более выразительным примером.

В разделе есть TODO-комментарий о необходимости более выразительного примера.

Я могу помочь разработать более выразительный пример для этого раздела. Хотите ли вы, чтобы я предложил вариант или создал issue для отслеживания этой задачи?


185-285: Раздел об избегании логики в тестах содержит важную информацию и отличные примеры.

Объяснение проблем, связанных с включением логики в тесты, очень точное и информативное. Примеры наглядно демонстрируют разницу между плохими и хорошими практиками, показывая, как разделение сложного теста на несколько простых улучшает читаемость и надежность тестов.

Исправьте пунктуацию.

В разделе есть небольшая пунктуационная ошибка.

Предлагаю внести следующее изменение:

-При написании юнит-тестов старайтесь избегать ручной конкатенации строк, логических условий (таких как `Если`, `Пока`, `Для`, `#Если`) и других условий.
+При написании юнит-тестов старайтесь избегать ручной конкатенации строк, логических условий (таких, как `Если`, `Пока`, `Для`, `#Если`) и других условий.

Это изменение добавляет запятую после слова "таких", что делает предложение грамматически корректным.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~187-~187: Пропущена запятая: «таких, как»
Context: ...конкатенации строк, логических условий (таких как Если, Пока, Для, #Если) и други...

(TAKOJ_KAK)


287-465: Заключительные разделы содержат важную информацию и отличные примеры.

Объяснение преимуществ использования вспомогательных методов для настройки и очистки, а также важности фокусировки на одном действии в тесте, очень точное и информативное. Примеры наглядно демонстрируют разницу между плохими и хорошими практиками, показывая, как эти подходы улучшают читаемость и надежность тестов.

Исправьте орфографическую ошибку.

В разделе есть небольшая орфографическая ошибка.

Предлагаю внести следующее изменение:

-Тоже самое касается методов `ПередТестовымНабором` и `ПередВсемиТестами`.
+То же самое касается методов `ПередТестовымНабором` и `ПередВсемиТестами`.

Это изменение исправляет написание "То же самое", которое должно быть раздельным в данном контексте.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~299-~299: Пишется раздельно: «то же самое».
Context: ...одинаковые требования для всех тестов. Тоже самое касается методов ПередТестовымНабором...

(TO_JE)


[uncategorized] ~374-~374: Глаголы – однородные члены предложения: «завершается ошибкой, Гарантирует» или «завершается ошибкой и Гарантирует».
Context: ... * При сбое теста ясно, какой сценарий завершается ошибкой * Гарантирует, что тест сосредоточен только на одном ...

(Verb_comma_Verb)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 5d2258e and 5e70b12.

📒 Files selected for processing (3)
  • documentation/docs/cook-book/recommendations/common-recommendations.md (1 hunks)
  • documentation/docs/cook-book/recommendations/index.md (1 hunks)
  • documentation/docs/cook-book/recommendations/why-xunit.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
documentation/docs/cook-book/recommendations/common-recommendations.md

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...ации по модульному тестированию :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


[uncategorized] ~187-~187: Пропущена запятая: «таких, как»
Context: ...конкатенации строк, логических условий (таких как Если, Пока, Для, #Если) и други...

(TAKOJ_KAK)


[uncategorized] ~299-~299: Пишется раздельно: «то же самое».
Context: ...одинаковые требования для всех тестов. Тоже самое касается методов ПередТестовымНабором...

(TO_JE)


[uncategorized] ~374-~374: Глаголы – однородные члены предложения: «завершается ошибкой, Гарантирует» или «завершается ошибкой и Гарантирует».
Context: ... * При сбое теста ясно, какой сценарий завершается ошибкой * Гарантирует, что тест сосредоточен только на одном ...

(Verb_comma_Verb)

documentation/docs/cook-book/recommendations/why-xunit.md

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...# Почему именно модульные тесты :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)

🔇 Additional comments (6)
documentation/docs/cook-book/recommendations/why-xunit.md (3)

1-10: LGTM! Метаданные и введение корректны.

Метаданные файла и введение предоставляют необходимый контекст для документа. Повторение слова "Перевод" в строке 9 является намеренным и не требует исправления, так как оно используется в разных контекстах (как заголовок подсказки и как часть описания).

🧰 Tools
🪛 LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...# Почему именно модульные тесты :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


12-37: Отличное объяснение преимуществ модульного тестирования!

Этот раздел предоставляет четкое и всестороннее объяснение причин использования модульных тестов. Особенно ценно то, что охвачены различные аспекты, такие как сокращение времени функционального тестирования, защита от регрессии, создание исполняемой документации и уменьшение связности кода. Информация представлена понятно и убедительно.


38-48: Хорошо определены характеристики качественного модульного теста.

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

documentation/docs/cook-book/recommendations/common-recommendations.md (3)

17-19: Содержание раздела корректно и информативно.

Раздел кратко и четко объясняет важность избегания зависимостей от инфраструктуры в модульных тестах. Это соответствует лучшим практикам модульного тестирования.


145-183: Раздел об избегании "магических" строк содержит ценные рекомендации и отличные примеры.

Объяснение проблем, связанных с использованием "магических" строк, и способов их избежать, очень точное и информативное. Примеры наглядно демонстрируют разницу между плохими и хорошими практиками. Использование случайных значений в хорошем примере - отличное решение для демонстрации правильного подхода.


1-465: Документ предоставляет исчерпывающее руководство по модульному тестированию.

Этот документ охватывает ключевые аспекты модульного тестирования, включая naming conventions, организацию тестов, минимизацию тестов, избегание "магических" строк и логики в тестах, использование вспомогательных методов и фокусировку на одном действии в тесте. Каждый раздел содержит четкие объяснения и наглядные примеры, которые эффективно демонстрируют разницу между плохими и хорошими практиками.

Структура документа логична и последовательна, что облегчает его понимание и применение на практике. Несмотря на несколько мелких грамматических и орфографических ошибок, которые были отмечены ранее, общее качество содержания очень высокое.

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

🧰 Tools
🪛 LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...ации по модульному тестированию :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)


[uncategorized] ~187-~187: Пропущена запятая: «таких, как»
Context: ...конкатенации строк, логических условий (таких как Если, Пока, Для, #Если) и други...

(TAKOJ_KAK)


[uncategorized] ~299-~299: Пишется раздельно: «то же самое».
Context: ...одинаковые требования для всех тестов. Тоже самое касается методов ПередТестовымНабором...

(TO_JE)


[uncategorized] ~374-~374: Глаголы – однородные члены предложения: «завершается ошибкой, Гарантирует» или «завершается ошибкой и Гарантирует».
Context: ... * При сбое теста ясно, какой сценарий завершается ошибкой * Гарантирует, что тест сосредоточен только на одном ...

(Verb_comma_Verb)

Comment on lines 1 to 2
# Рекомендации по модульному тестированию

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Добавьте содержание в документ.

Спасибо за создание нового файла с рекомендациями по модульному тестированию. Однако в настоящее время файл содержит только заголовок.

Рекомендую добавить следующее содержание:

  1. Введение с объяснением важности модульного тестирования.
  2. Основные принципы написания эффективных модульных тестов.
  3. Примеры хороших и плохих практик в модульном тестировании.
  4. Рекомендации по использованию фреймворков для модульного тестирования (например, xUnit).
  5. Советы по поддержанию и рефакторингу тестов.

Это поможет сделать документ более информативным и полезным для разработчиков.

Comment on lines 50 to 54
## Кодовое покрытие

Высокий процент кодового покрытия часто ассоциируется с более высоким качеством кода. Однако само измерение не может определить качество кода. Установка слишком амбициозной цели по проценту кодового покрытия может оказаться контрпродуктивной. Представьте сложный проект с тысячами условных ветвлений и целью в 95% покрытия кода. Если в настоящее время проект поддерживает 90% покрытия, то затраты времени на учёт всех крайних случаев в оставшихся 5% могут оказаться огромными, а ценность этого может быстро снизиться.

Высокий процент кодового покрытия не является индикатором успеха и не подразумевает высокое качество кода. Это просто отражает количество кода, покрытого юнит-тестами. Для получения дополнительной информации смотрите раздел о покрытии кода в юнит-тестировании.
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Хорошее объяснение роли кодового покрытия в тестировании.

Этот раздел предоставляет сбалансированный взгляд на кодовое покрытие, подчеркивая, что высокий процент покрытия не всегда означает высокое качество кода. Это важное замечание, которое поможет разработчикам избежать чрезмерного фокуса на цифрах покрытия в ущерб качеству тестов.

Предлагаю добавить краткий пример или конкретную рекомендацию по оптимальному использованию метрики кодового покрытия. Например:

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

Comment on lines 1 to 54
---
tags: [Начало, Рекомендации]
sidebar_position: 0
---

# Почему именно модульные тесты

:::tip Перевод
Перевод (gpt) и адаптация статьи [Unit testing best practices with .NET Core and .NET Standard](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices) by [John Reese](https://reese.dev/)
:::

Существует несколько причин использования модульных тестов.

## Сокращение времени функционального тестирования

Функциональные (сценарные) тесты требуют значительных ресурсов. Обычно они включают запуск приложения и выполнение ряда шагов, которые вам (или другому сотруднику) необходимо пройти для проверки ожидаемого поведения. Тестировщик не всегда может знать все необходимые действия, и в таких случаях ему может понадобиться помощь более опытного коллеги. Время тестирования варьируется: оно может занять всего несколько секунд при проверке небольших изменений или растянуться на несколько минут при более крупных изменениях. Этот процесс нужно повторять при каждом внесении изменений в систему.

Модульные тесты, наоборот, выполняются за миллисекунды, запускаются одним нажатием кнопки и не требуют глубокого понимания всей системы.

## Защита от регрессии

Регрессионные дефекты — это дефекты, которые появляются при внесении изменений в приложение. Обычно тестировщики проверяют не только новую функциональность, но и уже существующие функции, чтобы убедиться, что ранее реализованные возможности работают корректно.

С модульными тестами можно запускать весь набор тестов после каждой сборки или даже после изменения одной строки кода. Это **дает уверенность** в том, что новый код не нарушает существующую функциональность.

## Исполняемая документация

Не всегда очевидно, что делает конкретный метод или как он себя ведет с определенными входными данными. Вы можете задаться вопросом: как метод работает, если передать ему пустую строку? А что если передать `Неопределено`?

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

## Меньшая связность кода

Когда код слишком тесно связан, его трудно тестировать модульно. Без написания тестов связи в коде могут быть не такими очевидными.

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

## Характеристики хорошего юнит-теста

**Быстрый**: Не редкость, что у зрелых проектов есть тысячи юнит-тестов. Юнит-тесты должны выполняться за короткое время, в миллисекундах.

**Изолированный**: Модульные тесты являются автономными, могут выполняться в изоляции и не зависят от каких-либо внешних факторов, таких как файловая система, внешние сервисы или база данных.

**Повторяемый**: Выполнение модульного теста должно быть согласовано с результатами, то есть всегда возвращает тот же результат, если вы ничего не измените между выполнением.

**Самопроверяемый**: Тест должен автоматически определять, прошел он или провалился, без вмешательства человека.

**Соизмеримый**: Написание юнит-теста не должно занимать непропорционально много времени по сравнению с тестируемым кодом. Если написание тестов занимает значительно больше времени, чем написание самого кода, следует рассмотреть более удобный для тестирования дизайн решения.

## Кодовое покрытие

Высокий процент кодового покрытия часто ассоциируется с более высоким качеством кода. Однако само измерение не может определить качество кода. Установка слишком амбициозной цели по проценту кодового покрытия может оказаться контрпродуктивной. Представьте сложный проект с тысячами условных ветвлений и целью в 95% покрытия кода. Если в настоящее время проект поддерживает 90% покрытия, то затраты времени на учёт всех крайних случаев в оставшихся 5% могут оказаться огромными, а ценность этого может быстро снизиться.

Высокий процент кодового покрытия не является индикатором успеха и не подразумевает высокое качество кода. Это просто отражает количество кода, покрытого юнит-тестами. Для получения дополнительной информации смотрите раздел о покрытии кода в юнит-тестировании.
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Отличный обзор важности модульного тестирования!

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

Для повышения полноты документа, рекомендую добавить краткий раздел о том, как начать внедрение модульного тестирования в проект. Например:

## С чего начать внедрение модульного тестирования

1. Выберите фреймворк для тестирования (например, xUnit для .NET).
2. Начните с написания тестов для новой функциональности.
3. Постепенно добавляйте тесты для существующего кода при его модификации.
4. Интегрируйте запуск тестов в процесс сборки и непрерывной интеграции.
5. Регулярно проводите обзор и рефакторинг тестов для поддержания их качества.

Это поможет читателям перейти от теории к практике внедрения модульного тестирования в своих проектах.

🧰 Tools
🪛 LanguageTool

[duplication] ~8-~8: Возможная опечатка: повтор слова
Context: ...# Почему именно модульные тесты :::tip Перевод Перевод (gpt) и адаптация статьи [Unit testing ...

(WORD_REPEAT_RULE)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Документация по движку
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant