Nano Hash - криптовалюты, майнинг, программирование

Разработка через тестирование - приложение Spring

Я разрабатываю REST API. У меня уже есть тесты Jmeter для функционального тестирования. Я хотел добавить модульные тесты, а также хочу с этого момента следить за разработкой, управляемой тестами (TDD), чтобы внести какие-либо улучшения и добавить новые функции в мой существующий проект (который неизбежно станет очень сложным и не будет иметь никаких модульных тестов) .

После того, как я много прочитал о TDD, я немного не понимаю, стоит ли мне переходить на TDD. Есть крайние взгляды за и против.

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

Есть предложения по поводу моего подхода?



Ответы:


1

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

Думайте о тесте как о ответе на следующие вопросы:

  1. Я закончил разработку этого класса?
  2. Могут ли классы, которые я уже разработал и протестировать, по-прежнему нормально работать после внесенных мной изменений?
  3. Как представить требования в виде исходного кода?

Объяснение по каждому вопросу:

  1. Как узнать, что вы закончили писать класс? Тест может сказать вам об этом, только показывая сообщение об успешном завершении теста после того, как ваш класс сделает все, что должен был сделать.
  2. Чтобы часто тестировать, вам нужна автоматизация тестирования.
  3. Всякий раз, когда у вас появляется новое требование, напишите новый тест, который представляет это требование.
11.10.2013
  • springDocs Они приступают к разработке весенний сервисный слой с TDD. Мне интересно, смогу ли я сделать что-то подобное? 11.10.2013
  • Я не совсем уверен, что вы имеете в виду, но если ваша проблема заключается в тестировании интерфейса REST, вы определенно можете сделать это с помощью тестов в стиле JUnit, при условии, что вы реализовали REST с использованием правильных инструментов. То есть, если вы не связали сеть / маршалинг-демаршалинг запросов с бизнес-логикой, что как раз и предоставляет Spring. Просто следуйте весеннему пути, и все будет хорошо. Помните: модульное тестирование - это не полный тест. Вы просто изолируете крошечный компонент большой системы и проверяете, нормально ли работает этот крошечный компонент. 12.10.2013

  • 2

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

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

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

    Итак, лучший подход:

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

    Позвольте мне знать, если это помогает. Я использовал TDD во многих своих проектах, и меня это устраивает.

    11.10.2013
  • TDD нужен не всегда, т.е. когда требования будут часто меняться 11.10.2013
  • Изменение требований всегда возможно, но если у вас есть надежный тестовый пример, вы не должны страдать. 11.10.2013
  • springDocs Они приступают к разработке весенний сервисный слой с TDD. Мне интересно, смогу ли я сделать что-то подобное? 11.10.2013
  • Ссылка очень хорошая и информативная. Да, вы можете продолжить и начать с уровня обслуживания. Но будьте осторожны, чтобы не придумать тестовые примеры интеграции. В этом случае вам, возможно, придется записать тестовые примеры для существующей функциональности. 11.10.2013

  • 3

    Поскольку вы используете Spring, я бы посоветовал, чтобы объект модульного тестирования не был веб-службой. Я бы сделал это POJO на основе интерфейса. На поведение не должен влиять выбор развертывания в качестве REST.

    Маршалинг и демаршалинг HTTP-запроса и ответа на объекты для POJO могут быть отдельными.

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

    11.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

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