Как делают Вас модульный тест модульный тест? [закрытый]

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

, обязательно загрузите драйвер, сначала выполнив Class.forName («org.postgresql.Driver»); в вашем коде.

Это из сообщения - https://www.postgresql.org/message-id/e13c14ec050510103846db6b0e@mail.gmail.com

Код jdbc работал нормально как автономная программа, но в TOMCAT он дал ошибку «Не найден подходящий драйвер»

89
задан rafek 15 October 2009 в 10:42
поделиться

17 ответов

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

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

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

63
ответ дан Jason Cohen 24 November 2019 в 07:16
поделиться

Еще больше автоматизации может помочь здесь! Да, запись модульных тестов может быть большой работой, так используйте некоторые инструменты для выручения Вас. Взгляните на что-то как Pex, от Microsoft при использовании.Net It, автоматически создаст комплекты модульных тестов на Вас путем исследования кода. Это придумает тесты, которые дают хорошее покрытие, пытаясь покрыть все пути через Ваш код.

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

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

1
ответ дан 24 November 2019 в 07:16
поделиться

Протестируйте все, что Вы можете. Даже тривиальные ошибки, как упущение преобразовать метры в ноги могут иметь очень дорогие побочные эффекты. Запишите тест, запишите код для него, чтобы проверить, заставить его передавать, идти дальше. Кто знает в какой-то момент в будущем, кто-то может изменить скидочный код. Тест может обнаружить проблему.

4
ответ дан Jim C 24 November 2019 в 07:16
поделиться

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

Это обычно легче видеть с чем-то большим чем тривиальным примером... и с тривиальными примерами, ну, в общем, если Вы так или иначе испортите модульный тест, человек, рассматривающий его, зафиксирует ошибку в тесте или ошибку в коде или обоих. (Они рассматриваются, правильно?) Как tvanfosson указывает , поблочное тестирование является всего одной частью плана SQA.

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

3
ответ дан Community 24 November 2019 в 07:16
поделиться

При применении Разработки через тестирование (TDD) каждый начинает с сбой тест. Этот шаг, который мог бы казаться ненужным, на самом деле здесь, чтобы проверить, что модульный тест тестирует что-то. Действительно, если тест никогда не перестал работать, он не приносит значения и хуже, приводит к неправильной уверенности, поскольку Вы будете полагаться на положительный результат, который ничего не доказывает.

При следовании за этим процессом строго, все ''единицы'' защищены системой поддержки, которую модульные тесты делают, даже самое приземленное.

Assert.IsEqual(p.DiscountPrice,90);

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

Теперь воображают Ваши потребности программного обеспечения поддерживать другой вид скидки на основе процента, возможно, в зависимости от купленного объема, Ваш продукт:: DiscountPrice () метод может стать более сложным. И возможно, что представление тех изменений нарушает простое дисконтное правило, которое мы имели первоначально. Тогда Вы будете видеть значение этого теста, который сразу обнаружит регрессию.

<час>

Красный - Green - Осуществляет рефакторинг - это должно помнить сущность процесса TDD.

Красный относится к красной панели JUnit, когда тесты перестали работать.

Green является цветом индикатора выполнения JUnit, когда все тесты передают.

Осуществляют рефакторинг при зеленом условии: удалите любой dupliation, улучшите удобочитаемость.

<час>

Теперь для обращения к точке о "3-4 слоях выше кода", это верно в традиционном (подобном водопаду) процессе, не, когда процесс разработки является гибким. И гибкий мир, куда TDD прибывает из; TDD является краеугольным камнем экстремальное программирование .

Гибкий о прямой связи, а не thrown-over-the-wall документах требования.

9
ответ дан philant 24 November 2019 в 07:16
поделиться

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

, Как тестирует попытку стоить усилия? По моему опыту, по крайней мере четырьмя способами, по крайней мере, при выполнении разработки через тестирование:

  • это помогает Вам придумать хорошо разъединенный дизайн. Вы можете только код модульного теста, который хорошо разъединяется;
  • это помогает Вам определить, когда Вы сделаны. Необходимость определить необходимое поведение в тестах помогает не создать функциональность, в которой Вы на самом деле не нуждаетесь и определяете, когда функциональность завершена;
  • это дает Вам систему поддержки для рефакторингов, которая делает код намного более поддающимся изменениям; и
  • это сохраняет Вас большая отладка времени, которое является ужасно дорогостоящим (я услышал оценки, что традиционно, разработчики тратят до 80% своего времени, отлаживая).
7
ответ дан Ilja Preuß 24 November 2019 в 07:16
поделиться

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

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

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

[РЕДАКТИРОВАНИЕ]

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

11
ответ дан tvanfosson 24 November 2019 в 07:16
поделиться

Как делает один , тестируют тест ? Мутация, тестирующая , является ценной техникой, которую я лично привык для удивительно хорошего эффекта. Прочитайте связанную статью для получения дополнительной информации и ссылки еще на большее количество академических ссылок, но в целом она "тестирует Ваши тесты" путем изменения исходного кода (изменяющийся "x + = 1" к "x - = 1", например) и затем повторно выполняющий тесты, гарантируя тому по крайней мере одному тесту сбои. Любые мутации, которые не вызывают тестовые отказы, отмечаются для более позднего расследования.

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

10
ответ дан Andrzej Doyle 24 November 2019 в 07:16
поделиться

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

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

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

Наконец, ответ на Ваш номинальный вопрос" , Как делают Вас модульный тест модульный тест? " то, что Вы не должны иметь к. Каждый модульный тест должен быть до полусмерти простым. Назовите метод с определенным входом и сравните его с его ожидаемым выводом. Если спецификация для метода изменится тогда, то можно ожидать, что некоторые модульные тесты на тот метод должны будут измениться также. Это - одна из причин, что Вы делаете поблочное тестирование на таком низком уровне гранулярности, таким образом [только 117] [приблизительно 117] из модульных тестов должны измениться. Если Вы находите, что тесты для многих различных методов изменяются для одного изменения в требовании, то Вы не можете тестировать на достаточно прекрасном уровне гранулярности.

22
ответ дан Bill the Lizard 24 November 2019 в 07:16
поделиться

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

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

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

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

Между прочим, лично я не использовал бы 100 в качестве цены в тестовом сценарии (или скорее если бы я сделал тогда, то я добавил бы другой тест с другой ценой). Причина состоит в том, что кто-то в будущем мог бы думать, что Скидка, как предполагается, является процентом. Одна цель тривиальных тестов как это состоит в том, чтобы гарантировать, что ошибки в чтении спецификации исправлены.

[Относительно редактирования: Я думаю, что неизбежно, что неправильная спецификация является точкой отказа. Если Вы не знаете то, что приложение, как предполагается, делает, то возможности - оно, не сделает этого. Но запись тестов для отражения спецификации не увеличивает эту проблему, этому просто не удается решить его. Таким образом, Вы не добавляете новые точки отказа, Вы просто представляете существующие отказы в коде вместо вафля документация.]

39
ответ дан Steve Jessop 24 November 2019 в 07:16
поделиться

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

, Если правила изменяются, тест перестанет работать, и это - хорошая вещь. Таким образом, необходимо изменить тест слишком в этом случае.

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

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

5
ответ дан Toon Krijthe 24 November 2019 в 07:16
поделиться

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

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

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

... [I] В реальном процессе у вас есть 3-4 слои над кодом (Business Запрос, Документ с требованиями, Архитектурный документ), где фактически определенное бизнес-правило (Скидка Цена - это цена - скидка) может быть неправильно определено. Если это так, ваш модульный тест ничего не значит для вас.

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

Для того, чтобы иметь такой образ мышления, необязательно быть «первым испытанием», но, как правило, это наиболее эффективный способ достичь желаемого. Когда вы делаете TDD, вы замыкаетесь в небольшом двух-трехминутном цикле Red Green Refactor. Ни в коем случае вы не можете остановиться и уйти, и в ваших руках будет полный беспорядок, на отладку и сборку которого уйдет час.

Кроме того, ваш модульный тест - еще один точка отказа ...

Успешный тест - это тест, демонстрирующий сбой в системе. Неудачный тест предупредит вас об ошибке в логике теста или в логике вашей системы. Цель ваших тестов - взломать код или доказать, что один сценарий работает.

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

Что мы здесь получаем?

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

Говоря о Feathers, есть два замечательных ресурса, которые вы должны проверить по этому поводу:

Оба они объясняют, как использовать эти типы практик и дисциплин в проектах, которые не являются «Greenfield». Они предоставляют методы написания тестов для тесно связанных компонентов, жестко привязанных зависимостей и вещей, над которыми вы не обязательно можете контролировать. Все дело в поиске "швов" и их проверке.

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

Говоря о Feathers, есть два замечательных ресурса, которые вы должны проверить по этому поводу:

Оба они объясняют, как использовать эти типы практик и дисциплин в проектах, которые не являются «Greenfield». Они предоставляют методы написания тестов для тесно связанных компонентов, жестко привязанных зависимостей и вещей, над которыми вы не обязательно можете контролировать. Все дело в поиске "швов" и их проверке.

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

Говоря о Feathers, есть два замечательных ресурса, которые вы должны проверить по этому поводу:

Оба они объясняют, как использовать эти типы практик и дисциплин в проектах, которые не являются «Greenfield». Они предоставляют методы написания тестов для тесно связанных компонентов, жестко привязанных зависимостей и вещей, над которыми вы не обязательно можете контролировать. Все дело в поиске "швов" и их проверке.

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

Говоря о Feathers, есть два замечательных ресурса, которые вы должны проверить по этому поводу:

Оба они объясняют, как использовать эти типы практик и дисциплин в проектах, которые не являются «Greenfield». Они предоставляют методы написания тестов для тесно связанных компонентов, жестко привязанных зависимостей и вещей, над которыми вы не обязательно можете контролировать. Все дело в поиске "швов" и их проверке.

Оба они объясняют, как использовать эти типы практик и дисциплин в проектах, которые не являются «Greenfield». Они предоставляют методы написания тестов для тесно связанных компонентов, жестко привязанных зависимостей и вещей, над которыми вы не обязательно можете контролировать. Все дело в поиске "швов" и их проверке.

Оба они объясняют, как использовать эти типы практик и дисциплин в проектах, которые не являются «Greenfield». Они предоставляют методы написания тестов для тесно связанных компонентов, жестко привязанных зависимостей и вещей, над которыми вы не обязательно можете контролировать. Все дело в поиске "швов" и их проверке.

[I] Если цена со скидкой неверна, группа тестирования все равно найдет проблему, Как модульное тестирование сэкономило работу?

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

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

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

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

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

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

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

8
ответ дан 24 November 2019 в 07:16
поделиться

Я понимаю вашу точку зрения, но она явно преувеличена.

По сути, ваш аргумент: тесты приводят к неудачам. Поэтому тесты плохие / пустая трата времени.

3
ответ дан 24 November 2019 в 07:16
поделиться

Я ' Я немного подумал о том, как правильно ответить на этот вопрос, и хотел бы провести параллель с научным методом. ИМО, вы могли бы перефразировать этот вопрос: «Как вы проводите эксперимент?»

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

Итак подобные эксперименты ], мы не описываем валидность модульного теста на основании того, проходит ли он сам модульный тест. Наряду с другими модульными тестами, он описывает наши предположения о тестируемой системе. Также, как и в экспериментах, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

t описывать валидность модульного теста в зависимости от того, проходит он сам модульный тест или нет. Наряду с другими модульными тестами, он описывает наши предположения о тестируемой системе. Также, как и в экспериментах, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

t описывать валидность модульного теста в зависимости от того, проходит он сам модульный тест или нет. Наряду с другими модульными тестами, он описывает наши предположения о тестируемой системе. Также, как и в экспериментах, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

Наряду с другими модульными тестами, он описывает наши предположения о тестируемой системе. Также, как и в экспериментах, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

Наряду с другими модульными тестами, он описывает наши предположения о тестируемой системе. Также, как и в экспериментах, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

как и эксперименты, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

как и эксперименты, мы стараемся максимально упростить то, что мы тестируем. «Как можно проще, но не проще».

В отличие от экспериментов , у нас есть хитрость в рукаве, чтобы проверить правильность наших тестов, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

у нас есть хитрость в рукаве, чтобы проверить, что наши тесты действительны, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

у нас есть хитрость в рукаве, чтобы проверить, что наши тесты действительны, кроме конвергентной достоверности. Мы можем с умом ввести ошибку, которая, как мы знаем, должна быть обнаружена тестом, и посмотреть, действительно ли тест терпит неудачу. (Если бы только мы могли сделать это в реальном мире, мы бы гораздо меньше зависели от этой конвергентной валидности!) Более эффективный способ сделать это - посмотреть, как ваш тест завершится неудачно, прежде чем его реализовать (красный шаг в Red, Green, Refactor ).

1
ответ дан 24 November 2019 в 07:16
поделиться

Даже если вы не протестируете свой код, он обязательно будет протестирован вашими пользователями в производственной среде. Как побочный эффект, вы потеряете доход из-за оттока клиентов. Вы можете рассчитывать на 11 потерянных или неприобретенных клиентов на 1 рассерженного покупателя.

0
ответ дан 24 November 2019 в 07:16
поделиться

При написании тестов нужно использовать правильную парадигму.

  1. Начните с написания ваших тестов.
  2. Убедитесь, что они не начали с.
  3. Заставьте их пройти.
  4. Проверяйте код перед тем, как проверять свой код (убедитесь, что тесты проверены.)

Вы не всегда можете быть уверены, но они улучшают общие тесты.

1
ответ дан 24 November 2019 в 07:16
поделиться

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

4
ответ дан 24 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: