Индикатор плохого дизайна

author: b?hringer friedrich, http://commons.wikimedia.org/wiki/File:Seefrosch01.JPG

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

Бывают моменты, когда приходится прилагать много усилий для написания теста очередной функции. Ты начинаешь писать тест и его код разрастается до невиданных размеров или ты стопоришься на том, что не знаешь, как “замочить” или “застабить” функцию/класс. И тут начинается колдовство и просыпается изобретательность, которые приводят к тому, что коллега, просмотрев тест, с трудом понимает, что в нем происходит.

Если у тебя сейчас так, то тебе нужно остановиться. Убери руки с клавиатуры и взгляни на свою систему. Возможно тебе стоит заменить наследование композицией? Возможно твоя функция берет на себя слишком много обязанностей? А может у тебя слишком много зависимостей? Подумай, что мешает тебе написать простой тест?

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

Tags:

Post Author

This post was written by who has written 22 posts on Agile.by.

  • Pingback: Интересные ссылки №191 - mourk - блог разработчиков

  • Andrew Svetlov

    +1.
    Все верно.

    Я пишу в основном на Питоне.
    И, поверьте, умею легко и непринужденно сделать stub/mock на что угодно, благо язык это позволяет.

    Но если приходится в тестах напрягать мозг – это именно признак плохого дизайна.

    Если имеем legacy code – стоит подумать о цене приведения его в божеский вид.

    Если свежесозданный код требует танцев с бубном – нужно его переработать.