Это - плохая практика для запущения тестов на базе данных вместо на поддельных репозиториях?

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

13
задан Peter Mortensen 31 December 2016 в 23:11
поделиться

11 ответов

Причины использовать поддельные данные вместо реального DB:

  1. Скорость. Если Ваши тесты являются медленными, Вы не собираетесь выполнять их. Насмешка DB может сделать Ваш тестовый прогон намного быстрее, чем они иначе могли бы.
  2. Управление. Ваши тесты должны быть единственным источником Ваших данных тестирования. При использовании поддельных данных тесты выбирают, какие фальшивки Вы будете использовать. Таким образом, нет никакого шанса, что Ваши тесты испорчены, потому что кто-то оставил DB в незнакомом состоянии.
  3. Независимость порядка. Мы хотим, чтобы наши тесты были выполнимы в любом порядке вообще. Вход одного теста не должен зависеть от вывода другого. Когда Ваши тесты управляют данными тестирования, тесты могут быть независимы друг от друга.
  4. Независимость среды. Ваши тесты должны быть выполнимыми в любой среде. Необходимо смочь выполнить их в то время как на поезде, или в плоскости, или дома, или на работе. Они не должны зависеть от внешних сервисов. При использовании поддельных данных Вам не нужен внешний DB.

Теперь, если Вы создаете маленькое небольшое приложение, и при помощи реального DB (как MySQL) можно достигнуть вышеупомянутых целей, затем любой ценой использовать DB. Я делаю. Но не сделайте ошибку, когда Ваше приложение растет, Вы в конечном счете столкнетесь с потребностью дразнить DB. Это в порядке, сделайте это, когда Вы должны. YAGNI. Просто удостоверьтесь, что Вы ДЕЙСТВИТЕЛЬНО делаете это, КОГДА Вы должны. Если Вы позволите ему пойти, то Вы заплатите.

20
ответ дан 1 December 2019 в 20:44
поделиться

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

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

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

Однако если Вы действительно хотите протестировать на своей базе данных, Вы можете. Существуют, оборудует ту установку справки и разъединение база данных, как dbunit.

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

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

2
ответ дан 1 December 2019 в 20:44
поделиться

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

IQueryable<Customer> GetCustomers() {...}

Затем Ваш UI мог запросить:

var foo = GetCustomers().Where(x=>SomeUnmappedFunction(x));

bool SomeUnmappedFunction(Customer customer) {
   return customer.RegionId == 12345 && customer.Name.StartsWith("foo");
}

Это передаст для основанной на объектах фальшивки repo, но перестанет работать для фактических реализаций дб. Конечно, можно аннулировать это при наличии дескриптора репозитория все запросы внутренне (никакой внешний состав); например:

Customer[] GetCustomers(int? regionId, string nameStartsWith, ...) {...}

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

2
ответ дан 1 December 2019 в 20:44
поделиться

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

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

1
ответ дан 1 December 2019 в 20:44
поделиться

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

Вы не должны использовать DI/МОК или иметь модульные тесты или дразнить Ваш доступ дб, если все, что Вы пишете, является простым, "Связываются с Нами" форма. Однако, где разграничить между "простым" приложением, и "сложный" является трудным.

Другими словами, используйте свое лучшее суждение, поскольку нет никакого ответа hard-set на это.

1
ответ дан 1 December 2019 в 20:44
поделиться

Нормально делать это для сценария, пока Вы не рассматриваете их как тесты "единицы". Это были бы интеграционные тесты. Вы также хотите рассмотреть, будете ли Вы вручную тестировать через UI снова и снова, как Вы могли бы, просто автоматизировал Ваши испытания с помощью дыма вместо этого. Учитывая, что, Вы могли бы даже рассмотреть не выполнение интеграционных тестов вообще и просто работать на тестовом уровне functional/ui (поскольку они будут уже покрывать интеграцию).

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

1
ответ дан 1 December 2019 в 20:44
поделиться

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

В модульном тесте "тест" более важен, чем "единица".

1
ответ дан 1 December 2019 в 20:44
поделиться

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

Однако существует несколько недостатков:

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

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

1
ответ дан 1 December 2019 в 20:44
поделиться

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

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

Кроме того, некоторые базы данных отрегулированы законами о конфиденциальности, таким образом, в зависимости от Вашего контракта и кто владеет основным DB, Вы можете или не можете быть по закону разрешены получить доступ к реальным данным.

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

0
ответ дан 1 December 2019 в 20:44
поделиться

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

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

0
ответ дан 1 December 2019 в 20:44
поделиться

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

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

0
ответ дан 1 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

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