Да, 24 кадра в секунду означает, что в каждую секунду имеется 24 изображения (каждое изображение является кадром). ffmpeg может извлечь эту последовательность кадров. ffmpeg может собрать последовательность кадров для создания видео. Вы можете редактировать / фотошоп / заменять кадры между этими двумя шагами; ffmpeg не может предотвратить это и не будет беспокоиться об этом (если размеры изображения остаются такими же, как и у всех остальных кадров).
Причины использовать поддельные данные вместо реального DB:
Теперь, если Вы создаете маленькое небольшое приложение, и при помощи реального DB (как MySQL) можно достигнуть вышеупомянутых целей, затем любой ценой использовать DB. Я делаю. Но не сделайте ошибку, когда Ваше приложение растет, Вы в конечном счете столкнетесь с потребностью дразнить DB. Это в порядке, сделайте это, когда Вы должны. YAGNI. Просто удостоверьтесь, что Вы ДЕЙСТВИТЕЛЬНО делаете это, КОГДА Вы должны. Если Вы позволите ему пойти, то Вы заплатите.
Это вид зависит, что Вы хотите протестировать. Часто Вы хотите протестировать фактическую логику в своем коде не, данные в базе данных, таким образом настраивая полную базу данных только для запущения тестов являются пустой тратой времени.
Также рассмотрите объем работы, который входит в поддержание Ваших тестов и testdatabase. Тестирование Вашего кода с базой данных часто означает Ваш, тестируют Ваше приложение в целом вместо различных частей в изоляции. Это часто приводит к большой работе, сохраняющей и базу данных и тесты в синхронизации.
И последняя проблема состоит в том, что тест должен работать в изоляции, таким образом, каждый тест должен или работать на своей собственной версии базы данных или оставить ее внутри точно то же состояние, как это было, прежде чем тест работал. Это включает состояние после проваленного теста.
Однако если Вы действительно хотите протестировать на своей базе данных, Вы можете. Существуют, оборудует ту установку справки и разъединение база данных, как dbunit.
Я видел, что люди пытаются создать модульный тест как это, но почти всегда это оказывается намного большим количеством работы затем, это на самом деле стоит. Большинство отказалось от него на полпути во время проекта, большая часть отказа ttd полностью во время проекта, думая передача опыта в поблочное тестирование в целом.
Таким образом, я рекомендовал бы сохранить тесты простыми и изолированными и инкапсулировал бы Ваш код, достаточно хороший, становится возможно протестировать Ваш код в изоляции.
Я думаю, что это зависит от того, фиксируются ли Ваши запросы в репозитории (более оптимальный вариант, 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 независимо. С компонуемыми запросами Вы вынуждены использовать интеграционные тесты повсюду, если Вы хотите, чтобы это было полезно.
Это скорее зависит от того, настраивается ли DB автоматически тестом, также изолируется ли база данных от других разработчиков.
В данный момент это не может быть проблема (например, только один разработчик). Однако (для ручной установки базы данных) установка базы данных является дополнительным препятствием для того, чтобы запустить тесты, и это - очень плохая вещь.
Если Вы просто запишете простое одноразовое приложение, которое Вы абсолютно знаете, то не вырастет, я думаю, что много "лучших практик" просто идет право из окна.
Вы не должны использовать DI/МОК или иметь модульные тесты или дразнить Ваш доступ дб, если все, что Вы пишете, является простым, "Связываются с Нами" форма. Однако, где разграничить между "простым" приложением, и "сложный" является трудным.
Другими словами, используйте свое лучшее суждение, поскольку нет никакого ответа hard-set на это.
Нормально делать это для сценария, пока Вы не рассматриваете их как тесты "единицы". Это были бы интеграционные тесты. Вы также хотите рассмотреть, будете ли Вы вручную тестировать через UI снова и снова, как Вы могли бы, просто автоматизировал Ваши испытания с помощью дыма вместо этого. Учитывая, что, Вы могли бы даже рассмотреть не выполнение интеграционных тестов вообще и просто работать на тестовом уровне functional/ui (поскольку они будут уже покрывать интеграцию).
Как другие, как указано, которых трудно разграничить на сложном/не комплексе, и Вы были бы обычно теперь, когда слишком поздно :(. Если Вы уже привыкли к выполнению их, я уверен, что Вы не получите много служебное. Если бы это не имело место, то Вы могли бы извлечь уроки из него :)
Насколько Реальный DB не стоит на пути, и можно пойти быстрее тем путем, я был бы прагматически настроен и пошел бы для него.
В модульном тесте "тест" более важен, чем "единица".
Предположение, что Вы хотите автоматизировать это, самая важная вещь, состоит в том, что можно программно генерировать начальное условие. Это кажется, что это имеет место, и еще лучше Вы тестируете данные реального мира.
Однако существует несколько недостатков:
Ваша реальная база данных не могла бы покрыть определенные условия в Вашем коде. Если у Вас есть поддельные данные, Вы заставляете то поведение происходить.
И как Вы указываете, у Вас есть простое приложение; когда это станет менее простым, Вы захотите иметь тесты, которые можно категоризировать как модульные тесты и тестирование системы. Модульные тесты должны предназначаться для простой части функциональности, которую будет намного легче сделать с поддельными данными.
Одно преимущество поддельных репозиториев состоит в том, что Ваша регрессия / поблочное тестирование последовательно, так как можно ожидать те же результаты для тех же запросов. Это помогает создать определенные модульные тесты.
Существует несколько недостатков, если Ваш код (если не только запрос чтения) изменяет данные: - если у Вас есть ошибка в Вашем коде (который является, вероятно, почему Вы тестируете), Вы могли закончить тем, что повредили производственную базу данных. Даже если Вы не повредили его. - если производственная база данных изменяется со временем и особенно в то время как Ваш код выполняется, можно потерять след тестовых материалов, которые Вы добавили, и придись нелегко более поздняя очистка его из базы данных. - Производственные запросы от других систем, получающих доступ к базе данных, могут рассматривать Ваши данные тестирования как реальные данные, и это может повредить результаты важных бизнес-процессов где-нибудь в будущем. Например, даже при маркировке данных с определенным флагом или префиксом можно ли гарантировать, что кто-либо получающий доступ к базе данных будет придерживаться этой схемы?
Кроме того, некоторые базы данных отрегулированы законами о конфиденциальности, таким образом, в зависимости от Вашего контракта и кто владеет основным DB, Вы можете или не можете быть по закону разрешены получить доступ к реальным данным.
Если бы необходимо работать на производственной базе данных, я рекомендовал бы работать на копии, во время которой можно легко создать часов пик.
Это - действительно простое приложение, и Вы не видите, что он растет, я вижу, что без проблем не запускает Ваши тесты на реальном DB. Если, однако, Вы думаете, что это приложение вырастет, важно, чтобы Вы объяснили это в своих тестах.
Сохраните все столь простым, как, и если Вы требуете более гибкого тестирования позже, можно сделать его так. Запланируйте заранее, хотя, потому что Вы не хотите иметь огромное приложение через 3 года, которое полагается старый и hacky (для крупного приложения) тесты.
Оборотные стороны к запущению тестов против Вашей базы данных являются отсутствием скорости и сложности для установки Вашего состояния базы данных прежде, чем запустить тесты.
Если Вы управляете этим нет никакой проблемы в запущении тестов непосредственно против базы данных; это - на самом деле хороший подход, потому что это моделирует Ваш конечный продукт лучше, чем выполнение против поддельных данных. Ключ должен иметь прагматический подход и рассматривать лучшую практику как инструкции и не правила.