Обязательно ли модульное тестирование аксессоров? - PullRequest
11 голосов
/ 27 февраля 2009

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

Ответы [ 11 ]

16 голосов
/ 27 февраля 2009

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

7 голосов
/ 27 февраля 2009

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

ИМХО, если вы думаете о том, чтобы пропустить добавление тестов для метода, вы можете спросить себя, нужен ли этот метод или нет. В интересах полного раскрытия, я один из тех людей, которые добавляют сеттер или геттер только тогда, когда это необходимо. Вы будете удивлены тем, как часто вам действительно не нужен доступ к конкретному элементу после создания или когда вы хотите предоставить доступ только к результатам некоторых вычислений, которые действительно зависят от элемента. Но я отвлекся.

Хорошая мантра - всегда добавлять тесты. Если вы не думаете, что он вам нужен, потому что метод тривиален, попробуйте вместо этого удалить метод. Я понимаю, что общий совет заключается в том, что можно пропустить тесты для «тривиальных» методов, но вы должны спросить себя, нужен ли этот метод. Если вы пропустите тест, вы скажете, что метод всегда будет тривиальным. Помните, что модульные тесты также функционируют как документация по предлагаемому намерению и договору . Следовательно, тесты тривиального метода утверждают, что метод действительно должен быть тривиальным.

3 голосов
/ 27 февраля 2009

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

Единственное объяснение для тестирования простых свойств - это увеличить тестовое покрытие - но это просто глупо.

3 голосов
/ 27 февраля 2009

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

2 голосов
/ 27 февраля 2009

Безобидный путь! Пустая трата времени!

Даже Боб Мартин См. ТАК подкаст 41 , дедушка Agile говорит нет.

2 голосов
/ 27 февраля 2009

Наша компания имеет как людей, так и мнений. Я склонен не тестировать их специально, так как они обычно

  • автоматически генерируется
  • протестировано в контексте другого теста (например, есть какой-то другой код, использующий эти средства доступа
  • не содержит кода, который может сломаться

Хотя есть исключения:

  • Когда они не просто генерируются «получателями» и «установщиками»
  • Когда они являются частью важного API, который просто предоставляется для других пользователей и не проверен в контексте, в котором вы сейчас находитесь

В обоих этих случаях может заставить меня проверить их. Первый больше второго.

2 голосов
/ 27 февраля 2009

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

Несмотря на то, что 100% охват тестированием является замечательным идеалом, в какой-то момент вы сталкиваетесь с уменьшающейся отдачей, когда время, потраченное на написание теста, не стоит той выгоды, которую вы получаете от его проведения.

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

1 голос
/ 27 февраля 2009

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

  1. Имеет ли получатель / установщик доступ к чему-либо на DAL (уровне доступа к данным)?

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

  1. Можно ли предположить, что получатель / установщик выдаст исключение?

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

Кроме этого, я бы не стал беспокоиться, поскольку Дэн указал: «В какой-то момент вы должны верить, что компилятор сгенерирует нужную вам программу».

1 голос
/ 27 февраля 2009

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

С другой стороны, тестирование средства доступа требует меньше времени, чем при задании этого вопроса:)

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

1 голос
/ 27 февраля 2009

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

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