html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Модульное тестирование — личный опыт

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

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



Сразу поясню — под «хорошей архитектурой» я имею в виду разделение системы на слабозависимые модули (слои), при котором система сохраняет устойчивость после изменений внутри модулей.

А заметил я это следующим образом: начинаю писать код с желанием покрыть его юнит-тестами. В другой ситуации накатал бы несколько страниц говнокода, лишь бы работало и выполняло то что требуется. Но из-за намерения использования юнит-тесты приходится выделять интерфейсы, создавать на всё отдельные службы, абстрагироваться от UI, применять всяческие шаблоны типа IoC, DependencyInjection, ослабляющие связанность системы и т. п.

Я знаю идею про то что сперва нужно писать тесты, а потом уже код, и поначалу так и делал. Но когда объем кода очень большой — уже не до этого. В итоге тесты я стал писать только в том случае, когда в коде обнаруживаются ошибки. Заглючил метод — пишу на него тест. Глюков нет — не пишу. Таким образом я как бы реализую правило «не писать тесты для тривиального кода».

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

И именно это стремление к потенциальной возможности написания юнит-тестов задает нижнюю планку качества проектирования приложения.

Случалось работать с унаследованным кодом — нужно было его поддерживать и улучшать. Обычно выяснялось, что это «банка с червяками» — там всё взаимосвязано так, что изменения в одном месте самым непредсказуемым образом откликались в других местах. Возникало естественное желание (по науке, как в книжках) перед изменением такого кода покрыть его тестами. Но как покрывать, если для создания экземпляра класса, бывает, требуется создать десяток других классов, которые еще тянут за собой сотню других? И даже mockи не всегда помогают. Вот и получается, что для запутанного кода создать полноценные тесты крайне сложно — он изначально для этого не предназначен.

Еще по теме: статья habrahabr.ru/blogs/development/51706

Резюме: пишите код так, как будто вы его на самом деле собираетесь покрывать юнит-тестами :)
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с habrahabr.ru

0

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • habrahabr.ru
          • домен habrahabr.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции