powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тесты для MS SQL
21 сообщений из 21, страница 1 из 1
Тесты для MS SQL
    #39747323
Pabl0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете скинуть дельные статьи или пример где бы использовалось и как использовалось, говорят в MS SQL можно писать тесты (я не знаю где этот раздел даже находится), которые тестируют процедуры, триггеры и тд, если кто то что то знает по этой теме поделитесь :)
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747327
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pabl0,

VS + SQL Data Tools, tutorial на сайте MS. Придется создать проект базы данных и в нем вести разработку. Тестировочные самописки оказались сложны и не покрывали всех потребностей.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747345
Фотография hnkovr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747452
_human
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747525
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pabl0Можете скинуть дельные статьи или пример где бы использовалось и как использовалось, говорят в MS SQL можно писать тесты (я не знаю где этот раздел даже находится), которые тестируют процедуры, триггеры и тд, если кто то что то знает по этой теме поделитесь :)

Вообще надо понимать, что unit tests тестируют модули кода. Ключевое слово "модули". Ваша БД -- она существует сама по себе или у неё есть клиентское приложение? Так вот надо тестировать клиентское приложение, его классы и методы, которые будут обращаться в БД и потом проверят результат этого теста, например факт появления или изменения записей.

Вы не тестируете таблицу пользователей или процедуру создания пользователя или триггер на таблице пользователя, вы тестируете класс пользователя, метод создать пользователя, метод обновить пользователя, метод дать права пользователю и т.д.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747591
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По рефакторингу и, в том числе и о вопросах тестирования рекомендую изучить

Эмблер Скотт, Садаладж Прамодкумар Дж. Рефакторинг баз данных: эволюционное проектирование.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747628
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747630
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninВообще надо понимать, что unit tests тестируют модули кода. Ключевое слово "модули". Ваша БД -- она существует сама по себе или у неё есть клиентское приложение?

Если в вашей базе есть функции-триггеры-процедуры - но они могут тестироватся точно также как и на других языках.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747665
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninВы не тестируете таблицу пользователей или процедуру создания пользователя или триггер на таблице пользователя, вы тестируете класс пользователя, метод создать пользователя, метод обновить пользователя, метод дать права пользователю и т.д.Это противоречит вашему же:a_voroninВообще надо понимать, что unit tests тестируют модули кода. Ключевое слово "модули".

Идея юнит тестов в том, что бы покрыть тестами не только интерфейс программы, а именно модули кода.
То есть, если какой то метод не вызывается непосредственно нажатием кнопки в UI, то это не значит, что его не надо тестировать.
Тестируется весь код, даже если какой то код вызывается другим, уже протестированным кодом, а тот в свою очередь ещё каким то кодом, тоже протестированым.
Ну и если у вас какой то код написан не на C#, а, например, на джаве, или на T-SQL, то это не значит, что его не надо покрывать тестами, это точно такая же часть системы, как и метод "создать пользователя"

Уж не говоря о том, что клиентским приложением может быть макрос в Экселе, или нарисованная мышкой страничка в SSIS, и что же, если нету классов, то нету юнит-тестов?

Далее уже вопрос в технологичности, стоимости и т.д. Может, в какой то разработке разумнее будет не покрывать юнит-тестами код на T-SQL, в другой исключить код на PowerShell или оставить в покое макросы экселя.
Но это уже решается теми, кто ведёт проект. Если десяток сиквелистов настукивают на T-SQL тыщу строк в день, то идея покрыть это юнит тестами выглядит вполне разумной.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747676
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

По-моему, вы написали про integration tests, это другой вид тестирования, который нет отменяет unit tests.

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

Адепты CI\CD рекомендуют писать такое количество unit tests, чтобы получать 80% покрытие, и при успешном прохождении тестов автоматически выкладывать полученное в прод.
Я, правда, не сторонник.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747680
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eleanora_voronin,

По-моему, вы написали про integration tests, это другой вид тестирования, который нет отменяет unit tests.

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

Адепты CI\CD рекомендуют писать такое количество unit tests, чтобы получать 80% покрытие, и при успешном прохождении тестов автоматически выкладывать полученное в прод.
Я, правда, не сторонник.

Нет, я имел ввиду unit-tests , и ими тестируют бизнес-логику, во всяком случае так было в моей время 2005-2010 годах. Когда ими тестируют UI или базу, это выгладит странно, если только база не тестируется в контексте бизнес логики.

И вообще эту тему пора отправить в раздел проектирования ПО или куда-то туда.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747777
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База в принципе не тестируема юнит-тестами в прямом понимании за исключением таблиц, представлений, и некоторых функций ввиду сильной связности программного кода с кодом и объектами данных. На базе почти всегда тесты интеграционные или функциональные.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747859
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовБаза в принципе не тестируема юнит-тестами в прямом понимании за исключением таблиц, представлений, и некоторых функций ввиду сильной связности программного кода с кодом и объектами данных. На базе почти всегда тесты интеграционные или функциональные.
Это не совсем так.
Вы сами уже упомянули VS + SQL Data Tools, так же в топике был упомянут tSQLt, который вполне нормально уживается с тестированием средствами VS.
Вполне нормально тестуруется ф-ционал хранимых процедур, триггеров и.т.п., с эмуляцией необходимых данных в затрагиваемых таблицах. Но требует некоторых танцев с бубном при настройке всей этой радости, и достаточных ресурсов на поддержание и наполенение тестами.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747913
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zandr,

Вы забыли упомянуть сложности и объем работ, с которыми столкнется разработчик при создании mock-объектов, а также невозможность проверить код, например, использующий вложенные транзакции с откатами по ошибке или использование Srvice Brocker. Возникшие проблемы в свое время привели к отказу от использования tSQLt в связи с трудоемкостью и непокрытием всех кейсов эксплуатации MS SQL сервера. Переход к интеграционному уровню с использование системы SQL DataTools решил все проблемы.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39747938
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовZandr,

Вы забыли упомянуть сложности и объем работ, с которыми столкнется разработчик при создании mock-объектов, а также невозможность проверить код, например, использующий вложенные транзакции с откатами по ошибке или использование Srvice Brocker. Возникшие проблемы в свое время привели к отказу от использования tSQLt в связи с трудоемкостью и непокрытием всех кейсов эксплуатации MS SQL сервера. Переход к интеграционному уровню с использование системы SQL DataTools решил все проблемы.

Я встречался с людьми, которые хотели с помощью юнит-тестов тестировать даже UI. Пытаюсь донести одну простую мысль -- с их помощью тестируют БИЗНЕС-ЛОГИКУ.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39748037
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовZandr,
Вы забыли упомянуть сложности и объем работ

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
BEGIN TRAN TestUniqueName

    DECLARE @test_name sysname = 'TestUniqueName [fn_unit_test_name] purpose of current test' 

BEGIN TRY  SET NOCOUNT ON;

------------- 1. prepare data for unit test -------------

-- insert some data or execute code

------------- 2. execute unit test -------------

-- run tested function

END TRY

BEGIN CATCH

    SELECT ERROR_NUMBER() AS ErrorNumber,    ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE()   AS ErrorState

         , @test_name     AS ErrorProcedure, ERROR_LINE()     AS ErrorLine,     ERROR_MESSAGE() AS ErrorMessage

END CATCH

------------- 3. result verification -------------

-- execute command to get data for verification

IF 0 <>  @result1 OR 6 < @result2

BEGIN

   RAISERROR ('FAILED: %s must be change %d and %d ', 16, -1, @test_name, @result1, @result2 )

END

ELSE

    print 'PASSED: ' + @test_name

ROLLBACK TRAN TestUniqueName

GO



Вот простейшая структура, позволяющая покрывать логику в базе, не без ограничений конечно.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39748049
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

нет, не от лени :) tSQLt не разруливает транзакционные ситуации, а это тупик. И привязанные к схеме объекты сложно мОчить, как я писал выше. Также эта система не может быть опубликована и использована не на боевой базе, а это большой недостаток. Нам пришлось вносить исправления в оригинальный код, чтобы развернуть тестовый проект в отдельной базе. На практике моки оказались не нужны, равно как и следовать культу карго мудульного тестирования. SSDT полностью покрывает потребности. Более того, интеграционное оказалось эффективнее при решении SQL задач. У меня было года полтора практики, так что мои утверждения не на пустом месте. В общем, больше проблем создаёт, чем решает.
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39748083
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовLepsik,

нет, не от лени :) tSQLt не разруливает транзакционные ситуации, а это тупик. И привязанные к схеме объекты сложно мОчить, как я писал выше. Также эта система не может быть опубликована и использована не на боевой базе, а это большой недостаток. Нам пришлось вносить исправления в оригинальный код, чтобы развернуть тестовый проект в отдельной базе. На практике моки оказались не нужны, равно как и следовать культу карго мудульного тестирования. SSDT полностью покрывает потребности. Более того, интеграционное оказалось эффективнее при решении SQL задач. У меня было года полтора практики, так что мои утверждения не на пустом месте. В общем, больше проблем создаёт, чем решает.

@Владислав а можно 2-3 примера тестов - не код, а смысл того что они тестриуют на словах
и как это запускалось - автоматом черзе жоб - каждые N часов ?
и как и кому результат приходил.
Т.е описание процесса целиком
ибо задача встает уже не в 1-й раз - а приемлемого решения я так и не видел.


допустим orpahns (провисшие записи) легко найти - скажем по всем таблицам

у нас тут написали самописные 12 тестов ну и простую обертку для них
но я пока не вижу практической пользы
они покрывают те проблемы (баги) что УЖЕ БЫЛИ и были ПОФИКШЕНЫ.
теортетически они могут появиться снова - ну тогда они будут опознаны
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39748084
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовtSQLt не разруливает транзакционные ситуации, а это тупик. .

Транзакцийнные можно разруливать средствами TSQL но плохо, лучше этого не делать. Делать функциональными во внешнем приложнии.

--И привязанные к схеме объекты сложно мОчить, как я писал выше

какие обьекты в TSQL? - тут нет ООПа и виртуальных функций.
Подход tsqlt.org на мой взгляд ущербен

юнит тесты тестируют внутреннюю логику.
запускатся должны на пустой базе.

На боевых базах запускают только нагрузочные, иногда функциональные тесты.


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

У меня скрипт на питоне, он создает пустую базу, прогоняет 100500 тестов и я спокоен за покрытую логику.

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


А у меня 5 лет успешной практики. Можно научится решать проблемы, а можно сказать что это бесполезно :)
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39748102
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepsikЭто от лени
Что-то вроде этого я и имел ввиду, когда писал: "... достаточных ресурсов на поддержание и наполенение тестами.."

LepsikМожно научится решать проблемы, а можно сказать что это бесполезно :)
Вот, прям, соглашусь )
...
Рейтинг: 0 / 0
Тесты для MS SQL
    #39748845
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

Если не вести проект "на коленке", а в решении SSDT, то tSQLt отделить от проекта из-за ссылок невозможно. Я вижу, что у вас другая практика разработки, которая как-то совместима с tSQLt. Возможно, Вы просто не используете функционал сиквела в более-менее полном объёме.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тесты для MS SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]