Что НЕ нужно тестировать?

У меня сложилось впечатление, что некоторые проблемы просто сложны для unit test. И даже если вы это сделаете, часто такие тесты не имеют большого значения.

Какой код не должен тестироваться на модуле, кроме геттеров и сеттеров?

(может быть похоже на этот вопрос)

Ответы

Ответ 1

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

Можете ли вы привести пример проблемы, слишком сложной для модульного тестирования? Я слышал, что это использовалось как предлог, чтобы избежать тестирования кода восстановления и диагностики ошибок, вызванного только редкими и очень маловероятными обстоятельствами, но каждый раз, когда это возникало, я утверждал, что, наоборот, этот код является тем наиболее нуждающихся в модульных тестах, поскольку он не будет реализован в тестах интеграции и нормальном использовании (например, на этапе QA).

Dependency Injection позволяет использовать поддельный или макетный объект для поддержки (независимо от того, что "никогда не должно вызывать эту ошибку, но мы все равно ее покрываем" - сеть, база данных, интерфейс управления питанием и т.д.), а также ваш подделка или макет легко может и определенно должен вызывать ложные ошибки всех видов, чтобы вы могли полностью проверить этот код восстановления и диагностики ошибок.

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

Но я недавно перешел на Business Intelligence, и я заметил, что подход тоже хорошо переносится: если числа, которые производит мой код (возможно, чтобы показать, как хороший график для лиц, принимающих решения, и т.д.), стоит все, они должны быть точными, что означает (между прочим), что код, создающий их, должен быть протестирован так же тщательно и тщательно, как тот, который контролирует сеть или систему электропитания! -)

Ответ 2

Это вопрос стоимости и выгоды, тем ближе вы пытаетесь добраться до 100%, тем дороже он будет.

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

В зависимости от вашей ситуации вы можете отказаться от тестирования сквозных уровней и сгенерированного кода.

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

Ответ 3

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

Ответ 4

В моем текущем проекте я занимаюсь автоматическим тестированием, функциями и функциональными возможностями системы, но вообще не тестирую единицы: Следует ли тестировать внутреннюю реализацию или тестировать только общественное поведение?

Некоторые люди говорят, что единственной альтернативой модульного тестирования является ручное тестирование ad-hoc; но многие из преимуществ (например, регрессионное тестирование) исходят из автоматизированного тестирования, а не обязательно от него находится на уровне единицы.

Ответ 5

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

Если есть случаи, когда у вас уже есть дизайн, и это хорошая причина для его существования, и это не критически важная часть приложения, такая как незначительная функция пользовательского интерфейса, тогда может быть сделан случай что это не обязательно стоит бороться с созданием unit test for. Но это не обязательно то же самое, что "не должно" быть проверено блоком.

Ответ 6

Автоматические модульные тесты не могут выполняться на графическом коде, так как компьютер не может решить, действительно ли то, что делается на экране, правильно или нет! Хотя вы можете написать руководство unit test в этом случае, конечно