Написание среды модульного тестирования для тестирования хранимых процедур SQL

Сегодня у меня возникла идея написать фреймворк для модульного тестирования хранимых процедур в MySQL. Полная идея написана в недавнем посте в моем блоге. Вкратце это выглядит так: Я хочу автоматизировать тестирование процедур, я хочу использовать стандартизированный способ тестирования своих процедур. Модульное тестирование широко документировано, и существует множество фреймворков XUnit, почему бы не написать одну для MySQL (или любой другой базы данных). Конечно, это будет открытый исходный код. Что вы думаете? Это глупо, глупо, ненужно что ли? Или другая идея - написать общую структуру базы данных на SQL. Хм, очень хочу с кем-нибудь это обсудить, собраться с мыслями и идеями.

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

vfilby 30.10.2008 01:18

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

Nikola Stjelja 30.10.2008 01:51

Это глупо, глупо, ненужно что ли? да

FlySwat 30.10.2008 02:41

Вы имеете в виду как MyTAP?

Michael Mior 12.09.2011 07:16
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
10
4
6 202
7

Ответы 7

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

Я считаю, что просто тестирование DAL заключается в том, что вы, по сути, тестируете сами хранимые процедуры с добавленным кодом .Net DB, и я не думаю, что нам нужно беспокоиться о модульном тестировании. Таким образом, вы можете использовать все инструменты и процессы, которые у вас уже есть, для модульного тестирования. Кажется, нужно приложить много усилий, чтобы разработать отдельную структуру для чего-то, что (ИМХО) может быть одинаково хорошо выполнено с существующими инструментами.

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

Ваше здоровье, V

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

vfilby 30.10.2008 02:40

Уже существует одна среда тестирования для Sql Server - TSQLUnit. Может быть, вы сможете почерпнуть из него какую-нибудь полезную информацию.

Спасибо за ссылку, обязательно проверю.

Nikola Stjelja 30.10.2008 01:14

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

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

Я думаю, что базы данных в первую очередь предназначались для данных, я стараюсь не допускать логики в базу данных. Даже большинство моих сохраненных процедур относительно свободны от логики. Я вижу смысл в DBA, я бы не хотел, чтобы они входили в мои модульные тесты :)

vfilby 30.10.2008 01:57

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

Nikola Stjelja 30.10.2008 08:37

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

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

Nikola Stjelja 30.10.2008 08:33

Книги по информатике часто призывают пользователей в полной мере использовать возможности базы данных, чтобы делать больше, чтобы программа могла делать меньше. База данных часто может выполнять сложную логику, используя такие конструкции, как множественные объединения, вложенные выборки, предложения IN и т. д., Намного быстрее, чем первая реализация программиста, без ошибок и с гораздо меньшими объемами программирования со стороны пользователя. (Это не всегда так; иногда БД является узким местом, которое может преодолеть тщательное алгоритмическое программирование.) В общем, то, что в БД недостаточно логики, чтобы сделать тестирование целесообразным, просто неправда.

Dan Nissenbaum 07.09.2015 17:15

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

Меня часто спрашивали, есть ли что-то подобное для MySQL. Может, вы уже что-то написали?

Попробуйте TST: http://tst.codeplex.com

Это модульное тестирование не для MySql. Человек просит разработать платформу модульного тестирования для MySql.

Rahat Khanna 19.11.2012 17:27

Модульные тесты уже существуют. Помимо dbUnit и sqlUnit, попробуйте:

MyTAP: https://github.com/hepabolu/mytap
datacharmer.org: http://datacharmer.blogspot.com/2006/01/mysql-5-general-purpose-routine_27.html

Другие вопросы по теме