
хорошее утро в понедельник, я mpj, и вы
наблюдая за забавными функциями на этой неделе
видео будет посвящено единичным испытаниям
против интеграционных тестов я хотел бы
начните говорить об автоматических тестах в
Вообще , когда вы впервые начинаете делать
разработка программного обеспечения одна из первых
концепции, которые вы будете очень
знать о том , баксы вы начнете писать некоторые
кусок программного обеспечения, и он отлично работает, но
вы не совсем так думали об этом
вы исправить это , а затем протестировать вокруг
бит и о, я должен исправить этот случай
а также после того, как приложение
растет и есть совсем немного
тестовые примеры, которые вы должны пройти
каждый раз, когда вы делаете изменения, чтобы сделать
Убедитесь , что вы ничего не сломать
Причудливое слово для этого — регрессия
вы в основном проверяете, что ваш
программное обеспечение не прогрессировало , что
функция , которая ранее работала в настоящее время является
сломан или, возможно, он начал работать
другим способом, который пользователь не будет
как так давайте говорить , что вы начинаете
выполнение регрессионного тестирования вручную
потому что ваше приложение мало, оно не
есть много особенностей, это в основном
возможно, у меня есть десять двадцать тестовых случаев
что вы должны проходить каждый раз
вы отпускаете, но через несколько месяцев и вы
активно работайте над своим программным обеспечением
это число растет от
двадцать дел до тридцати до сорока и
вы, вероятно, в сотни после
через пару месяцев, по крайней мере, сейчас вы
возможно, создал лист excel, который
отслеживает все ручные регрессионные тесты
что вы должны делать, и каждый раз, когда вы
сделай релиз , через который ты проходишь
таблицу, то вы делаете руководство
тестирование и каждый тест на удивление
слишком сложно, потому что вы должны
создать этот свежий пользователь и моделировать
свежее состояние в приложении, а затем
работа оттуда, и даже если у вас есть
хороший инструмент для создания тестовых пользователей, которые
может сделать это быстро и установить
приложение в определенном состоянии это заканчивается
взяв хотя бы пару минут
за каждый тестовый пример, что означает, что
у вас в основном есть как минимум
человек или, может быть, даже пара лиц
тратить больше суток на выполнение просто
ручное регрессионное тестирование, а затем
сделать вещи еще более сложными
осознайте, что ваши клиенты
в разных средах, где они выполняются
ваше приложение, например, может иметь
наших различных операционных систем или
разные устройства разные мобильные
телефонов, или они могут запускать их в
различные веб-браузеры, и это влияет на
ваши тесты, чтобы этот список вашей сотни
регрессионные тесты фактически умножаются
по количеству операционных систем вы
поддержки, а также умножается на
количество устройств , которые поддерживают создание
этот комбинаторный взрыв вы обнаружите
что даже если у вас есть штатные люди
используется только для проведения регрессионного тестирования
вы обнаружите, что они перегружены
и если они не будут перегружены, они
в конечном итоге
список из 100 тестовых случаев будет продолжать расти
это именно то, как работает программное обеспечение
очень редко вы удаляете функции
от программного обеспечения, по крайней мере, по сравнению с тем, как
часто вы добавляете вещи в программное обеспечение, чтобы
Ответ на эту проблему, конечно,
машины используют основную часть вашего
регрессионное тестирование для вас вы не можете
полностью заменить человеческие тестеры
автоматические тесты частично потому, что есть
некоторые вещи, которые могут видеть только люди и
также потому, что тестовые случаи должны быть
изобретенный в первую очередь и людьми
намного лучше, чем машины
делая так называемое разведочное тестирование, но
основная часть вашего регрессионного тестирования может
и должно быть сделано машинами, что я
хочу сказать, что здесь
что автоматические тесты абсолютно
решающее значение для качества продукции
так что это может быть суровым для
скажем, но если вы не используете автоматические тесты
Я готов поспорить довольно много денег
что ваше программное обеспечение не очень хорошо, если мы
создают программное обеспечение, которое люди
полагаясь на работу, мы должны иметь
автоматические тесты в следующий раз. Я собираюсь
определить , что я имею в виду с помощью теста блока и
и интеграционный тест, потому что есть
много путаницы и разных обычаев
терминологии, когда дело доходит до
автоматическое тестирование сначала мы собираемся
говорить об определении единичного теста
так что предположим, что вы строите
приложения обычно имеют
по крайней мере, некоторые попытки, что Norka
текстуры ваше приложение может иметь
например, предположим, что это слой вида
просмотр представления может иметь некоторые другие
слой, который он взаимодействует с let’s
назовите его контроллером, но это может быть
что-то вроде некоторых людей, называемых моделями
некоторые люди называют логикой, кто-то может
Назовите это ядром, это просто слова
нет официального определения или
ничего для них, хотя некоторые
люди могли бы дать вам впечатление
что есть, а может быть, у вас есть
какой — то базы данных ваш контроллер
запись и чтение из базы данных
и, возможно, у вас есть ах, кого вы знаете
платежной системы, а также это код, который
как правило, написано вами
и это внешний компонент вида
вашего приложения может быть построено
из нескольких меньших частей, которые мы могли бы
вызывать компоненты или модули или
независимо от того, используете ли вы реакцию
Например, это будет ваша реакция
вы знаете то, что вы
определите с помощью JSX и таким же образом
контроллера или бизнес-логики или
без разницы
также состоит из нескольких меньших
если вы используете Redux для этого
слой, например, эти компоненты
быть твоими творениями и твоими
редукторов точная терминология не
Важный действительно важный вынос
здесь, как и ваше приложение сделано
из этих частей, какими бы они ни были
эти единицы, которые мы можем написать модульные тесты
для испытаний и в изоляции единичных задач
что мы пишем, что они касаются только
с этим другом здесь эта часть
взаимодействует с платежной системой и
он используется несколькими
компонентов в представлении, но когда мы
мы не занимаемся
эта система или эти системы мы только
касающийся этой системы, эта часть так
что мы делаем в наших модульных тестах, так это то, что
этот вход здесь мы фактически не являемся пользователем
воспроизводя реальные входы, мы просто
положить в поддельных входов в
контроллер и в модульном тесте мы
не давая этой части реальный платеж
системы мы даем ему поддельный платеж
системы так называемой макетной платежной системы
что мы ожидаем, что эта часть
некоторые выполняют определенные действия и
Затем мы исследуем нашу поддельную платежную издеваться
следить за тем, какие звонки были
и затем просто убедитесь, что
эта часть делала правильное
путь, если вы заинтересованы в обучении
больше о концепции насмешливости у меня есть
сделал видео о том, что вы можете
найти в описании эпизода это
сообщение было передано вам бывшим депутатом
J вынос здесь в том, что тестирование
эти вещи эти части индивидуально
и изолированный, который является определением
блок тест хорошо, поэтому с учетом того, что
является определение интеграционного теста
отказ от ответственности заключается в том, что несколько
люди собираются дать вам разные
ответы на вопрос о том, что
интеграционный тест я собираюсь дать
вы так помните нашу гипотетическую
приложения до того, как мы напишем
интеграционный тест мы пишем задачу
который касается всего
приложение или, по крайней мере, несколько
компонентов мы могли бы написать интеграцию
это выглядит так,
некоторый компонент в представлении, а некоторые некоторые
компонент в контроллере или что-то еще
вы называете это
и это также касается базы данных в
факт, что интеграционный тест может даже
интеграционный тест может даже охватывать
несколько компонентов контроллера и
примером интеграционного теста может быть
то, что просто пробивает
все приложение, например, может
необходимо перейти на страницу с описанием и
в корзину, а затем просмотреть
телега этих вещей они касаются много
материал
в отличие от блока проверить эти вещи
интеграционные тесты, как правило, используют
реальную базу данных, которую вы настраиваете и вращаете
и создайте для себя устройство для
интеграционного теста вы не можете
использовать реальную базу данных и
поставщик реальных платежей, потому что тогда вы
будет производить платежи и
тест, который вы запускаете, но они очень тяжелые
подделывает, как будто это настоящая база данных
что вы вращаетесь и заселяетесь
с примерами данных, например, и вверх
здесь это, вероятно, что-то, что выглядит
как настоящий браузер, например, что-то
который контролируется селеном или
возможно, фантомный фантом Гай
вот что- то очень
смотрит на систему как на реального пользователя
что происходит, щелкая
приложение , как я определяю
интеграция проверяет что-то, что касается
несколько компонентов одним махом
вы не обязательно должны будете
реальные базы данных и прочее некоторые части
возможно, интеграционный тест может быть
издевательские задачи интеграции — это нечеткое
но для этого видео это
тест , касающийся нескольких компонентов
теперь, когда мы определили, какие модульные тесты
и интеграционные тесты, и то, что они
давайте поговорим о недостатках
модульных тестов есть два недостатка:
а первый —
они не проверяют контракт, что
это означает, что эти компоненты обзора
здесь они ожидают, что контроллер
контроллеру, чтобы выглядеть определенным образом, они
ожидайте, что у него будут методы и свойства
и вы знаете, как они ожидают этого
школе, чтобы выглядеть определенным образом в одном и том же
Кстати, эта часть здесь ожидает
платежная система , чтобы выглядеть определенным образом это
может ожидать, что модуль оплаты будет иметь
вы знаете, как метод, называемый pay
независимо от того, что это за контракт
между этими частями заявки
этот контракт должен быть
чтобы мы могли сделать модульное тестирование и
это то, что мы используем для этого
пример, когда мы передаем наш макет
платежное обслуживание в эту часть
здесь мы удостоверились, что этот макет оплаты
служба реализует тот же контракт или
интерфейс или все , что вы хотели бы
называйте это реальным платежным сервисом
части контроллера, это действительно не волнует
если он получает реальный платеж
услугу или услугу макет платежей
важной частью является то, что она реализует
договор оплаты в статически типизированном
таких языков, как Java, вы бы хотели
вероятно , решить эту проблему за счет того ,
платежное обслуживание и макет оплаты
сервис реализуется как оплата
сервисный интерфейс, но в JavaScript мы
не нужно делать, чтобы мы просто убедились
что у них одинаковые методы вызова
и это слабость блока
тесты
потому что они не проверяют это взаимодействие
модульный тест будет проверять, что это
часть ваших частей делает вызов определенным
вызов контроллера и блока
тесты контроллера проверяют, что
контроллер выполняет определенные функции, такие как
вызов платежной системы на основе
на основе исходных данных, которые
вид, но все это основано на
предположение, что мы получаем
договорные права оба теста, например, если
вы совершаете ошибку, реализуя наши
платежного сервиса, или если мы делаем
ошибка, когда мы пишем фальшивку
вводят в контроллер наши тесты
не поймают эти ошибки, хотя
над вами тестовый путь интеграционные тесты
с другой стороны, это просто
это не касается этого вообще
просто проверяет приложения прямо
через и да, это поймает тех
ошибки, которые являются первым недостатком подразделения
проверяет , что они не тестируют
контракты, но интеграционные тесты
второй недостаток с единичным тестом заключается в том, что
вы должны создавать контракты, когда вы
начните писать блок-тесты в своей карьере
это будет просто раздражать вас
что вы обнаружите, что вам нужно
напишите новый шаблон, чтобы
код, который можно проверить, эти контракты, которые я
говорили о таких взаимодействиях
здесь и этому это разделение ему приходится
быть там, чтобы писать модульные тесты, если
платежная система не чиста
отделены от частей контроллера для
если вы говорите, что у вас есть
платежная система внутри этих частей
и назовите его прямо, тогда это не
действительно можно написать единичный тест
потому что хорошо, что это просто не единица
просто вещи смешались вместе
это не проблема, что интеграция
испытания, они просто проверяют
и затем они проверяют
базы данных, это не имеет значения для
если эти части не являются
должным образом
Ризе они просто проходят и проверяют меня
раньше говорили в статическом
типизированных языков, вы создали бы
интерфейс, который как платежный сервис
и унаследованная услуга оплаты
от или реализовано, что является проблемой
что вы, вероятно, честны ,
и это код, который вам нужно только
напишите, потому что вы хотите, чтобы
кода, и вы также должны создать
механизмов , чтобы получить ваш макет
платежная система в части контроллера
это механизм , который люди говорят
о том, когда они ссылаются на зависимость
в то время как раздражает то, что вы
должны создавать эти слои
разделение также является преимуществом, поскольку
это заставляет вас модулировать ваш код, если
у вас есть код, который является модульным, но
вы еще не писали
вы, вероятно, обнаружите, что
когда вы делаете это, ваш код совсем не
как модульный, как вы думали, он хочет, чтобы он
на самом деле довольно смешались вместе, а не
полностью разделены и пишут
модульные тесты помогли вам разоблачить
проблема, но это работа, которую вы должны сделать
для того, чтобы вы могли тестировать единицы измерения
тесты, безусловно , являются
вам придется создавать эти контракты
сейчас на этом этапе их карьеры много
разработчиков практически всех разработчиков
на самом деле сами спрашивают, не могу я
просто используйте только интеграционные тесты
Я имею в виду, что интеграционные тесты, похоже, проверяют
все это, и они, похоже, не имеют
любой из недостатков модульного теста
не могли бы мы просто использовать интеграцию
тесты для тестирования всего нашего приложения, тогда мы
просто иметь реальные базы данных, которые у нас нет
беспокоиться об этом насмешливом мы не делаем
должны беспокоиться об инъекции зависимостей
и заставляя бояться
ошибки и наш контракт, почему бы нам
использовать только
raishin test и почти все разработчики
попытайтесь сделать это в какой-то момент своего
карьера , но они тогда узнают , что
есть недостатки для интеграционных тестов
а также первое, что
интеграционные тесты более дороги
чем блок проверяет вторую проблему с
интеграционные тесты состоят в том, что они не могут
имитировать ошибки и третий недостаток
с интеграционными испытаниями заключается в том, что они
не говорите, где проблема, что
я имею в виду дорогие интеграционные тесты
являются дорогими тремя способами
и первый способ проведения интеграционных тестов
дороги в том , что они медленнее
бежать , чтобы облегчить эту вещь
вам нужно развернуть настоящий браузер и
вам нужно раскрутить реальную базу данных ,
как если бы вы были осторожны, вы могли бы быть
в состоянии сделать это относительно быстро, как если бы
у вас есть какая- то база данных, которая
очень быстро создавать и срывать
MongoDB, как, например, очень хорошо
при этом вы можете сделать это всего за пару
от сотни миллисекунд, и если вы
есть не полноценный браузер , но
браузер, как фантомный Jas, который также
довольно быстро, чтобы развернуться, тогда вы можете запустить
их разумно быстро, но неважно
как вы его отрезали, они очень очень
по сравнению с этой
может легко запустить сотни модульных тестов в
время, необходимое для запуска одного из
это имеет большое значение
потому что ах, пока ты развиваешься
хочу иметь возможность запускать тест как можно быстрее
насколько это возможно, каждый раз, когда вы
удалите команду save и если у вас есть тесты
который занимает секунды или даже минуты или
может быть, даже часы, чтобы бежать, вы не собираетесь
для этого вы собираетесь отложить это до
как процесс сборки, и, возможно, это
даже будет слишком медленным даже для вашего
построить процесс, чтобы начать откладывать его на
даже позже вы действительно хотите испытать комплект
что вы
бегать быстро, а не то, что будет
часов, поэтому интеграционный тест
часто в сотни раз медленнее запускать
чем единичный тест, вторая причина, почему
интеграционные тесты являются дорогостоящими, что
они довольно хрупкие, поэтому интеграция
такие тесты, как они охватывают множество систем
что в одном случае это хорошо, но
есть также много движущихся частей здесь
у вас есть браузер, у вас есть все эти
систем, и у вас есть база данных ,
вы разрываете эти
системы могут также
сети, поэтому у вас есть сеть
сетевой аспект к ним , а также и
больше этих мелочей, которые вы
более того,
может пойти не так, и потому что мы запускаем эти
вещи тысячи раз и потому, что
статистики, что-то пойдет не так
любой, кто написал эти вещи, они
знайте, что эти вещи очень
сложно получить ах с 100%
надежность поэтому тест интеграции много
более хрупкий, чем единичный тест, потому что
Есть много более подвижные части
третья и последняя причина, почему интеграция
тесты дороже, чем единичные тесты
заключается в том, что их просто сложнее написать
на первый взгляд кажется легким написать
единичный тест, который имеет пульт дистанционного управления a
браузер и клики в вашем приложении
а затем проверяет базу данных, но в
практика очень сложная, потому что
вы делаете это, и вы просто понимаете
что ничего не работает, и я не
действительно знаю, почему это просто тихо
если я делаю эти клики, и это
не закончив, я не получаю
правильный вывод в базе данных и
ошибка где-то в этом приложении
и приложение огромно эти вещи
обычно имеют какой- то экран
перетасовки, которые вы можете использовать
для отладки, но часто бывает трудно получить
застряли следы и прочее из этих
вещи, и, возможно, вы не можете войти в
этой системы, но
то у вас проблемы с этим
а также мы соглашаемся с тем, что
есть много системы и говорят здесь и
иногда иногда все идет не так
что означает, что у вас есть прерывистый
проблемы, и у вас нет реального способа
понять эти прерывистые проблемы из
если у вас нет какой- либо регистрации
тесты интеграции инфраструктуры требуют
гораздо больше работы и навыков для их написания
модульные тесты на порядок
сложнее, потому что интеграционные тесты
дорогая
вы просто не можете создать достаточно их
проверить свое приложение, если вы
на самом деле пытается охватить все ваши
возможные тестовые примеры с использованием интеграции
тесты, которые вы
парализованы с количеством времени и
усилий, необходимых для отладки и
поддерживать и писать свою интеграцию
они просто слишком дороги для
используйте для всех своих тестов, но это
не единственный недостаток с интеграцией
теста есть также тот факт, что
интеграционные тесты не могут имитировать ошибки
если мы вернемся и посмотрим на нашу голову
пример приложения ваша система должна быть ошибкой
упругое право
если поставщик платежей по какой-либо причине
вниз ваше приложение не может просто
он должен быть способен справиться с этим
ошибка изящно или база данных может
имеют сетевую ошибку, это может быть
сеть между ними, как вы
нужна способность подделывать ошибки и единицы
тесты действительно сияют на этом, это очень
трудно сделать в тесте интеграции это
это может быть даже невозможно в зависимости от
что ваша установка выглядит как симуляция
ошибки на самом деле являются
хорошие аргументы для модульного тестирования, потому что
это также одно из того, что руководство
регрессионное тестирование , как человек на основе нашего
регрессионное тестирование также очень плохо
поэтому модульные тесты
это ваша единственная линия обороны
против этих ошибок, но наиболее
неприятный недостаток с интеграцией
проверяет , что они не говорят вам
где проблема в том, что я коснулся этого
немного раньше , когда я говорил о
как сложно провести интеграционные тесты
когда вы запускаете тест как интеграцию
тест, и он терпит неудачу где-то
иногда вам повезло, и вы получаете
трассировка стека с четким ясным
описание, где ошибка, но
чаще всего это просто не сработает
и не в cryptical способом , который посылает
вы на диком погони иглы в стоге сена
через все эти системы пытаются
узнайте, где все пошло не так, это
еще хуже, если ошибка прерывистая
потому что тогда вы не сможете на самом деле
позволить детерминистически запускать его и отлаживать
приложение, на которое вы должны положиться
Long’s, а затем вам нужно очень
хорошая регистрация в вашем интеграционном тесте
рамки, в которых вы обычно должны
нет, потому что это сложно, поэтому мы
не может просто заменить модульный тест на
интеграционного теста из-за
недостатки интеграционных тестов
интеграционные тесты являются дорогостоящими , они
не могут имитировать ошибки, и они не
расскажите, где у вас проблема.
вероятно, выяснил мораль
история, но вам нужны оба
интеграционные тесты и модульные тесты, когда
обсуждая эти вещи, что молодые
разработчиков, которые звучали высокомерно
но часто молодые разработчики часто
поставили теоретический вопрос, как я
но если вам нужно было выбрать, что больше
важные интеграционные тесты или блок
задачи — это как вопрос, какой из них
вы предпочли бы удалить свои
сердце или ваш мозг хорошо нуждается в мозге
тело, но нет, они оба новые
необходимых для создания
программное обеспечение, которое вы не можете сэкономить на одном из
они все равно давайте подведем итог, мы говорили
о единичном тестировании и ситуационных тестах I
иногда говорят о том, почему автоматические тесты
имеют решающее значение для производства качественного программного обеспечения
Я представляю определение модульных тестов
и я тогда представил традицию
интервенционист я полностью с уверенностью
у вас есть контроль, независимо от того, как вы
испытайте наше тестирование
части вашего приложения изолированно
в то время как задачи вмешательства больше похожи
проходящий через все приложение прикосновения
много разных систем или немного
о недостатке единичных тестов
что они не проверяют контракты
о том, как заключаются контракты
связь между вашим приложением
разделяет второй недостаток на единичный тест
заключается в том, что вам нужно создать эти
контракт в первую очередь и, наконец,
Я говорил о том, почему вы не можете просто
заменить модульные тесты интеграцией
испытаний из- за недостатков
интеграции, которые заключаются в том, что они
дорогие, и они не могут имитировать
ошибок, и они не сообщают вам, где
проблема в том, если вам понравилось это видео
пожалуйста, разделите, это будет падать, если
вы тот, кто приветствует вас
ваш — смотрел эпизод на вентиляторе вентилятора
функция я выпускаю каждый понедельник
утро
Oh 800 GMT, пожалуйста, нажмите ниже и проверьте
выйдите из канала и посмотрите,
то, что вам нравится и, возможно, даже
подписали меня, а затем DJ до следующего
В понедельник утром следите за обновлениями
наблюдая за забавными функциями на этой неделе
видео будет посвящено единичным испытаниям
против интеграционных тестов я хотел бы
начните говорить об автоматических тестах в
Вообще , когда вы впервые начинаете делать
разработка программного обеспечения одна из первых
концепции, которые вы будете очень
знать о том , баксы вы начнете писать некоторые
кусок программного обеспечения, и он отлично работает, но
вы не совсем так думали об этом
вы исправить это , а затем протестировать вокруг
бит и о, я должен исправить этот случай
а также после того, как приложение
растет и есть совсем немного
тестовые примеры, которые вы должны пройти
каждый раз, когда вы делаете изменения, чтобы сделать
Убедитесь , что вы ничего не сломать
Причудливое слово для этого — регрессия
вы в основном проверяете, что ваш
программное обеспечение не прогрессировало , что
функция , которая ранее работала в настоящее время является
сломан или, возможно, он начал работать
другим способом, который пользователь не будет
как так давайте говорить , что вы начинаете
выполнение регрессионного тестирования вручную
потому что ваше приложение мало, оно не
есть много особенностей, это в основном
возможно, у меня есть десять двадцать тестовых случаев
что вы должны проходить каждый раз
вы отпускаете, но через несколько месяцев и вы
активно работайте над своим программным обеспечением
это число растет от
двадцать дел до тридцати до сорока и
вы, вероятно, в сотни после
через пару месяцев, по крайней мере, сейчас вы
возможно, создал лист excel, который
отслеживает все ручные регрессионные тесты
что вы должны делать, и каждый раз, когда вы
сделай релиз , через который ты проходишь
таблицу, то вы делаете руководство
тестирование и каждый тест на удивление
слишком сложно, потому что вы должны
создать этот свежий пользователь и моделировать
свежее состояние в приложении, а затем
работа оттуда, и даже если у вас есть
хороший инструмент для создания тестовых пользователей, которые
может сделать это быстро и установить
приложение в определенном состоянии это заканчивается
взяв хотя бы пару минут
за каждый тестовый пример, что означает, что
у вас в основном есть как минимум
человек или, может быть, даже пара лиц
тратить больше суток на выполнение просто
ручное регрессионное тестирование, а затем
сделать вещи еще более сложными
осознайте, что ваши клиенты
в разных средах, где они выполняются
ваше приложение, например, может иметь
наших различных операционных систем или
разные устройства разные мобильные
телефонов, или они могут запускать их в
различные веб-браузеры, и это влияет на
ваши тесты, чтобы этот список вашей сотни
регрессионные тесты фактически умножаются
по количеству операционных систем вы
поддержки, а также умножается на
количество устройств , которые поддерживают создание
этот комбинаторный взрыв вы обнаружите
что даже если у вас есть штатные люди
используется только для проведения регрессионного тестирования
вы обнаружите, что они перегружены
и если они не будут перегружены, они
в конечном итоге
список из 100 тестовых случаев будет продолжать расти
это именно то, как работает программное обеспечение
очень редко вы удаляете функции
от программного обеспечения, по крайней мере, по сравнению с тем, как
часто вы добавляете вещи в программное обеспечение, чтобы
Ответ на эту проблему, конечно,
машины используют основную часть вашего
регрессионное тестирование для вас вы не можете
полностью заменить человеческие тестеры
автоматические тесты частично потому, что есть
некоторые вещи, которые могут видеть только люди и
также потому, что тестовые случаи должны быть
изобретенный в первую очередь и людьми
намного лучше, чем машины
делая так называемое разведочное тестирование, но
основная часть вашего регрессионного тестирования может
и должно быть сделано машинами, что я
хочу сказать, что здесь
что автоматические тесты абсолютно
решающее значение для качества продукции
так что это может быть суровым для
скажем, но если вы не используете автоматические тесты
Я готов поспорить довольно много денег
что ваше программное обеспечение не очень хорошо, если мы
создают программное обеспечение, которое люди
полагаясь на работу, мы должны иметь
автоматические тесты в следующий раз. Я собираюсь
определить , что я имею в виду с помощью теста блока и
и интеграционный тест, потому что есть
много путаницы и разных обычаев
терминологии, когда дело доходит до
автоматическое тестирование сначала мы собираемся
говорить об определении единичного теста
так что предположим, что вы строите
приложения обычно имеют
по крайней мере, некоторые попытки, что Norka
текстуры ваше приложение может иметь
например, предположим, что это слой вида
просмотр представления может иметь некоторые другие
слой, который он взаимодействует с let’s
назовите его контроллером, но это может быть
что-то вроде некоторых людей, называемых моделями
некоторые люди называют логикой, кто-то может
Назовите это ядром, это просто слова
нет официального определения или
ничего для них, хотя некоторые
люди могли бы дать вам впечатление
что есть, а может быть, у вас есть
какой — то базы данных ваш контроллер
запись и чтение из базы данных
и, возможно, у вас есть ах, кого вы знаете
платежной системы, а также это код, который
как правило, написано вами
и это внешний компонент вида
вашего приложения может быть построено
из нескольких меньших частей, которые мы могли бы
вызывать компоненты или модули или
независимо от того, используете ли вы реакцию
Например, это будет ваша реакция
вы знаете то, что вы
определите с помощью JSX и таким же образом
контроллера или бизнес-логики или
без разницы
также состоит из нескольких меньших
если вы используете Redux для этого
слой, например, эти компоненты
быть твоими творениями и твоими
редукторов точная терминология не
Важный действительно важный вынос
здесь, как и ваше приложение сделано
из этих частей, какими бы они ни были
эти единицы, которые мы можем написать модульные тесты
для испытаний и в изоляции единичных задач
что мы пишем, что они касаются только
с этим другом здесь эта часть
взаимодействует с платежной системой и
он используется несколькими
компонентов в представлении, но когда мы
мы не занимаемся
эта система или эти системы мы только
касающийся этой системы, эта часть так
что мы делаем в наших модульных тестах, так это то, что
этот вход здесь мы фактически не являемся пользователем
воспроизводя реальные входы, мы просто
положить в поддельных входов в
контроллер и в модульном тесте мы
не давая этой части реальный платеж
системы мы даем ему поддельный платеж
системы так называемой макетной платежной системы
что мы ожидаем, что эта часть
некоторые выполняют определенные действия и
Затем мы исследуем нашу поддельную платежную издеваться
следить за тем, какие звонки были
и затем просто убедитесь, что
эта часть делала правильное
путь, если вы заинтересованы в обучении
больше о концепции насмешливости у меня есть
сделал видео о том, что вы можете
найти в описании эпизода это
сообщение было передано вам бывшим депутатом
J вынос здесь в том, что тестирование
эти вещи эти части индивидуально
и изолированный, который является определением
блок тест хорошо, поэтому с учетом того, что
является определение интеграционного теста
отказ от ответственности заключается в том, что несколько
люди собираются дать вам разные
ответы на вопрос о том, что
интеграционный тест я собираюсь дать
вы так помните нашу гипотетическую
приложения до того, как мы напишем
интеграционный тест мы пишем задачу
который касается всего
приложение или, по крайней мере, несколько
компонентов мы могли бы написать интеграцию
это выглядит так,
некоторый компонент в представлении, а некоторые некоторые
компонент в контроллере или что-то еще
вы называете это
и это также касается базы данных в
факт, что интеграционный тест может даже
интеграционный тест может даже охватывать
несколько компонентов контроллера и
примером интеграционного теста может быть
то, что просто пробивает
все приложение, например, может
необходимо перейти на страницу с описанием и
в корзину, а затем просмотреть
телега этих вещей они касаются много
материал
в отличие от блока проверить эти вещи
интеграционные тесты, как правило, используют
реальную базу данных, которую вы настраиваете и вращаете
и создайте для себя устройство для
интеграционного теста вы не можете
использовать реальную базу данных и
поставщик реальных платежей, потому что тогда вы
будет производить платежи и
тест, который вы запускаете, но они очень тяжелые
подделывает, как будто это настоящая база данных
что вы вращаетесь и заселяетесь
с примерами данных, например, и вверх
здесь это, вероятно, что-то, что выглядит
как настоящий браузер, например, что-то
который контролируется селеном или
возможно, фантомный фантом Гай
вот что- то очень
смотрит на систему как на реального пользователя
что происходит, щелкая
приложение , как я определяю
интеграция проверяет что-то, что касается
несколько компонентов одним махом
вы не обязательно должны будете
реальные базы данных и прочее некоторые части
возможно, интеграционный тест может быть
издевательские задачи интеграции — это нечеткое
но для этого видео это
тест , касающийся нескольких компонентов
теперь, когда мы определили, какие модульные тесты
и интеграционные тесты, и то, что они
давайте поговорим о недостатках
модульных тестов есть два недостатка:
а первый —
они не проверяют контракт, что
это означает, что эти компоненты обзора
здесь они ожидают, что контроллер
контроллеру, чтобы выглядеть определенным образом, они
ожидайте, что у него будут методы и свойства
и вы знаете, как они ожидают этого
школе, чтобы выглядеть определенным образом в одном и том же
Кстати, эта часть здесь ожидает
платежная система , чтобы выглядеть определенным образом это
может ожидать, что модуль оплаты будет иметь
вы знаете, как метод, называемый pay
независимо от того, что это за контракт
между этими частями заявки
этот контракт должен быть
чтобы мы могли сделать модульное тестирование и
это то, что мы используем для этого
пример, когда мы передаем наш макет
платежное обслуживание в эту часть
здесь мы удостоверились, что этот макет оплаты
служба реализует тот же контракт или
интерфейс или все , что вы хотели бы
называйте это реальным платежным сервисом
части контроллера, это действительно не волнует
если он получает реальный платеж
услугу или услугу макет платежей
важной частью является то, что она реализует
договор оплаты в статически типизированном
таких языков, как Java, вы бы хотели
вероятно , решить эту проблему за счет того ,
платежное обслуживание и макет оплаты
сервис реализуется как оплата
сервисный интерфейс, но в JavaScript мы
не нужно делать, чтобы мы просто убедились
что у них одинаковые методы вызова
и это слабость блока
тесты
потому что они не проверяют это взаимодействие
модульный тест будет проверять, что это
часть ваших частей делает вызов определенным
вызов контроллера и блока
тесты контроллера проверяют, что
контроллер выполняет определенные функции, такие как
вызов платежной системы на основе
на основе исходных данных, которые
вид, но все это основано на
предположение, что мы получаем
договорные права оба теста, например, если
вы совершаете ошибку, реализуя наши
платежного сервиса, или если мы делаем
ошибка, когда мы пишем фальшивку
вводят в контроллер наши тесты
не поймают эти ошибки, хотя
над вами тестовый путь интеграционные тесты
с другой стороны, это просто
это не касается этого вообще
просто проверяет приложения прямо
через и да, это поймает тех
ошибки, которые являются первым недостатком подразделения
проверяет , что они не тестируют
контракты, но интеграционные тесты
второй недостаток с единичным тестом заключается в том, что
вы должны создавать контракты, когда вы
начните писать блок-тесты в своей карьере
это будет просто раздражать вас
что вы обнаружите, что вам нужно
напишите новый шаблон, чтобы
код, который можно проверить, эти контракты, которые я
говорили о таких взаимодействиях
здесь и этому это разделение ему приходится
быть там, чтобы писать модульные тесты, если
платежная система не чиста
отделены от частей контроллера для
если вы говорите, что у вас есть
платежная система внутри этих частей
и назовите его прямо, тогда это не
действительно можно написать единичный тест
потому что хорошо, что это просто не единица
просто вещи смешались вместе
это не проблема, что интеграция
испытания, они просто проверяют
и затем они проверяют
базы данных, это не имеет значения для
если эти части не являются
должным образом
Ризе они просто проходят и проверяют меня
раньше говорили в статическом
типизированных языков, вы создали бы
интерфейс, который как платежный сервис
и унаследованная услуга оплаты
от или реализовано, что является проблемой
что вы, вероятно, честны ,
и это код, который вам нужно только
напишите, потому что вы хотите, чтобы
кода, и вы также должны создать
механизмов , чтобы получить ваш макет
платежная система в части контроллера
это механизм , который люди говорят
о том, когда они ссылаются на зависимость
в то время как раздражает то, что вы
должны создавать эти слои
разделение также является преимуществом, поскольку
это заставляет вас модулировать ваш код, если
у вас есть код, который является модульным, но
вы еще не писали
вы, вероятно, обнаружите, что
когда вы делаете это, ваш код совсем не
как модульный, как вы думали, он хочет, чтобы он
на самом деле довольно смешались вместе, а не
полностью разделены и пишут
модульные тесты помогли вам разоблачить
проблема, но это работа, которую вы должны сделать
для того, чтобы вы могли тестировать единицы измерения
тесты, безусловно , являются
вам придется создавать эти контракты
сейчас на этом этапе их карьеры много
разработчиков практически всех разработчиков
на самом деле сами спрашивают, не могу я
просто используйте только интеграционные тесты
Я имею в виду, что интеграционные тесты, похоже, проверяют
все это, и они, похоже, не имеют
любой из недостатков модульного теста
не могли бы мы просто использовать интеграцию
тесты для тестирования всего нашего приложения, тогда мы
просто иметь реальные базы данных, которые у нас нет
беспокоиться об этом насмешливом мы не делаем
должны беспокоиться об инъекции зависимостей
и заставляя бояться
ошибки и наш контракт, почему бы нам
использовать только
raishin test и почти все разработчики
попытайтесь сделать это в какой-то момент своего
карьера , но они тогда узнают , что
есть недостатки для интеграционных тестов
а также первое, что
интеграционные тесты более дороги
чем блок проверяет вторую проблему с
интеграционные тесты состоят в том, что они не могут
имитировать ошибки и третий недостаток
с интеграционными испытаниями заключается в том, что они
не говорите, где проблема, что
я имею в виду дорогие интеграционные тесты
являются дорогими тремя способами
и первый способ проведения интеграционных тестов
дороги в том , что они медленнее
бежать , чтобы облегчить эту вещь
вам нужно развернуть настоящий браузер и
вам нужно раскрутить реальную базу данных ,
как если бы вы были осторожны, вы могли бы быть
в состоянии сделать это относительно быстро, как если бы
у вас есть какая- то база данных, которая
очень быстро создавать и срывать
MongoDB, как, например, очень хорошо
при этом вы можете сделать это всего за пару
от сотни миллисекунд, и если вы
есть не полноценный браузер , но
браузер, как фантомный Jas, который также
довольно быстро, чтобы развернуться, тогда вы можете запустить
их разумно быстро, но неважно
как вы его отрезали, они очень очень
по сравнению с этой
может легко запустить сотни модульных тестов в
время, необходимое для запуска одного из
это имеет большое значение
потому что ах, пока ты развиваешься
хочу иметь возможность запускать тест как можно быстрее
насколько это возможно, каждый раз, когда вы
удалите команду save и если у вас есть тесты
который занимает секунды или даже минуты или
может быть, даже часы, чтобы бежать, вы не собираетесь
для этого вы собираетесь отложить это до
как процесс сборки, и, возможно, это
даже будет слишком медленным даже для вашего
построить процесс, чтобы начать откладывать его на
даже позже вы действительно хотите испытать комплект
что вы
бегать быстро, а не то, что будет
часов, поэтому интеграционный тест
часто в сотни раз медленнее запускать
чем единичный тест, вторая причина, почему
интеграционные тесты являются дорогостоящими, что
они довольно хрупкие, поэтому интеграция
такие тесты, как они охватывают множество систем
что в одном случае это хорошо, но
есть также много движущихся частей здесь
у вас есть браузер, у вас есть все эти
систем, и у вас есть база данных ,
вы разрываете эти
системы могут также
сети, поэтому у вас есть сеть
сетевой аспект к ним , а также и
больше этих мелочей, которые вы
более того,
может пойти не так, и потому что мы запускаем эти
вещи тысячи раз и потому, что
статистики, что-то пойдет не так
любой, кто написал эти вещи, они
знайте, что эти вещи очень
сложно получить ах с 100%
надежность поэтому тест интеграции много
более хрупкий, чем единичный тест, потому что
Есть много более подвижные части
третья и последняя причина, почему интеграция
тесты дороже, чем единичные тесты
заключается в том, что их просто сложнее написать
на первый взгляд кажется легким написать
единичный тест, который имеет пульт дистанционного управления a
браузер и клики в вашем приложении
а затем проверяет базу данных, но в
практика очень сложная, потому что
вы делаете это, и вы просто понимаете
что ничего не работает, и я не
действительно знаю, почему это просто тихо
если я делаю эти клики, и это
не закончив, я не получаю
правильный вывод в базе данных и
ошибка где-то в этом приложении
и приложение огромно эти вещи
обычно имеют какой- то экран
перетасовки, которые вы можете использовать
для отладки, но часто бывает трудно получить
застряли следы и прочее из этих
вещи, и, возможно, вы не можете войти в
этой системы, но
то у вас проблемы с этим
а также мы соглашаемся с тем, что
есть много системы и говорят здесь и
иногда иногда все идет не так
что означает, что у вас есть прерывистый
проблемы, и у вас нет реального способа
понять эти прерывистые проблемы из
если у вас нет какой- либо регистрации
тесты интеграции инфраструктуры требуют
гораздо больше работы и навыков для их написания
модульные тесты на порядок
сложнее, потому что интеграционные тесты
дорогая
вы просто не можете создать достаточно их
проверить свое приложение, если вы
на самом деле пытается охватить все ваши
возможные тестовые примеры с использованием интеграции
тесты, которые вы
парализованы с количеством времени и
усилий, необходимых для отладки и
поддерживать и писать свою интеграцию
они просто слишком дороги для
используйте для всех своих тестов, но это
не единственный недостаток с интеграцией
теста есть также тот факт, что
интеграционные тесты не могут имитировать ошибки
если мы вернемся и посмотрим на нашу голову
пример приложения ваша система должна быть ошибкой
упругое право
если поставщик платежей по какой-либо причине
вниз ваше приложение не может просто
он должен быть способен справиться с этим
ошибка изящно или база данных может
имеют сетевую ошибку, это может быть
сеть между ними, как вы
нужна способность подделывать ошибки и единицы
тесты действительно сияют на этом, это очень
трудно сделать в тесте интеграции это
это может быть даже невозможно в зависимости от
что ваша установка выглядит как симуляция
ошибки на самом деле являются
хорошие аргументы для модульного тестирования, потому что
это также одно из того, что руководство
регрессионное тестирование , как человек на основе нашего
регрессионное тестирование также очень плохо
поэтому модульные тесты
это ваша единственная линия обороны
против этих ошибок, но наиболее
неприятный недостаток с интеграцией
проверяет , что они не говорят вам
где проблема в том, что я коснулся этого
немного раньше , когда я говорил о
как сложно провести интеграционные тесты
когда вы запускаете тест как интеграцию
тест, и он терпит неудачу где-то
иногда вам повезло, и вы получаете
трассировка стека с четким ясным
описание, где ошибка, но
чаще всего это просто не сработает
и не в cryptical способом , который посылает
вы на диком погони иглы в стоге сена
через все эти системы пытаются
узнайте, где все пошло не так, это
еще хуже, если ошибка прерывистая
потому что тогда вы не сможете на самом деле
позволить детерминистически запускать его и отлаживать
приложение, на которое вы должны положиться
Long’s, а затем вам нужно очень
хорошая регистрация в вашем интеграционном тесте
рамки, в которых вы обычно должны
нет, потому что это сложно, поэтому мы
не может просто заменить модульный тест на
интеграционного теста из-за
недостатки интеграционных тестов
интеграционные тесты являются дорогостоящими , они
не могут имитировать ошибки, и они не
расскажите, где у вас проблема.
вероятно, выяснил мораль
история, но вам нужны оба
интеграционные тесты и модульные тесты, когда
обсуждая эти вещи, что молодые
разработчиков, которые звучали высокомерно
но часто молодые разработчики часто
поставили теоретический вопрос, как я
но если вам нужно было выбрать, что больше
важные интеграционные тесты или блок
задачи — это как вопрос, какой из них
вы предпочли бы удалить свои
сердце или ваш мозг хорошо нуждается в мозге
тело, но нет, они оба новые
необходимых для создания
программное обеспечение, которое вы не можете сэкономить на одном из
они все равно давайте подведем итог, мы говорили
о единичном тестировании и ситуационных тестах I
иногда говорят о том, почему автоматические тесты
имеют решающее значение для производства качественного программного обеспечения
Я представляю определение модульных тестов
и я тогда представил традицию
интервенционист я полностью с уверенностью
у вас есть контроль, независимо от того, как вы
испытайте наше тестирование
части вашего приложения изолированно
в то время как задачи вмешательства больше похожи
проходящий через все приложение прикосновения
много разных систем или немного
о недостатке единичных тестов
что они не проверяют контракты
о том, как заключаются контракты
связь между вашим приложением
разделяет второй недостаток на единичный тест
заключается в том, что вам нужно создать эти
контракт в первую очередь и, наконец,
Я говорил о том, почему вы не можете просто
заменить модульные тесты интеграцией
испытаний из- за недостатков
интеграции, которые заключаются в том, что они
дорогие, и они не могут имитировать
ошибок, и они не сообщают вам, где
проблема в том, если вам понравилось это видео
пожалуйста, разделите, это будет падать, если
вы тот, кто приветствует вас
ваш — смотрел эпизод на вентиляторе вентилятора
функция я выпускаю каждый понедельник
утро
Oh 800 GMT, пожалуйста, нажмите ниже и проверьте
выйдите из канала и посмотрите,
то, что вам нравится и, возможно, даже
подписали меня, а затем DJ до следующего
В понедельник утром следите за обновлениями
Please follow and like us:
Be First to Comment