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

Логика модульного тестирования, данные интеграционного тестирования

У меня здесь была дискуссия о ценности модульного тестирования:

Зачем мне беспокоиться с модульным тестированием, могу ли я просто использовать интеграционные тесты?

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

Моя проблема заключается в том, что в реальных бизнес-приложениях 99% того, что они делают, - это манипулирование данными, значит ли это, что только 1% типичного приложения поддается модульному тестированию?


Ответы:


1

Я бы все равно использовал модульный тест, когда задействованы данные. Например, когда я тестирую свои обработчики ответов в веб-приложении, я не хочу, чтобы мне приходилось запускать фактический запрос ajax для проверки моего обработчика. Вместо этого я помещаю пример json в строку, а затем передаю его своему обработчику.

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

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

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

24.07.2012

2

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

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

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

24.07.2012
  • Я предполагаю, что тогда я говорю, что я тестирую однослойные методы доступа к данным, но у меня они извлекаются из образца базы данных с известными данными в качестве источника для теста. Это экономит время, поскольку вам не нужно подготавливать данные для каждого модульного теста. Итак, я предполагаю, что это будет гибридный тест? 27.07.2012
  • Новые материалы

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

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

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

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

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

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

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