tSQLt TRUSTWORTHY и требование CLR

Среда тестирования tSQLt требует включения TRUSTWORTHY ON для базы данных и включения SQL CLR для сервера.

Почему они необходимы? Можно ли добиться той же/аналогичной функциональности без объекта CLR?


person Justin Caldicott    schedule 10.05.2012    source источник
comment
Очевидный ответ заключается в том, что некоторая часть tSQLt состоит из кода SQL CLR, требующего доступа к внешним ресурсам, или неуправляемого кода. Что касается «возможно ли это?», ничего не мешает кому-то попытаться создать среду модульного тестирования SQL, которая работает на чистом T-SQL, но я желаю им удачи...   -  person AakashM    schedule 10.05.2012


Ответы (3)


Следующие функции полностью реализованы в виде кода CLR, и было бы особенно сложно (и, вероятно, невозможно) обойтись без CLR:

  • CaptureOuput: полезно для записи и проверки вывода, выводимого на консоль.
  • SuppressOutput: используется внутренне, чтобы помочь очистить консоль от предупреждений, возникающих в результате переименования объектов (особенно в FakeTable).
  • ResultSetFilter: необходим для захвата определенного набора результатов, созданного из сохраненного процесса, который создает несколько наборов результатов.
  • AssertResultSetsHaveSameMetaData: используется для сравнения метаданных двух наборов результатов.
  • NewConnection: позволяет выполнить произвольную команду SQL в новом соединении. Полезно для тестирования, когда некоторые свойства соединения должны отличаться. (Если мне не изменяет память, это может быть единственной причиной ДОВЕРИТЕЛЬНОГО ВКЛ сегодня).

Помимо этого, tSQLt использует CLR внутри для создания форматированного вывода для очень больших строк, таких как те, которые могут быть получены путем сравнения двух таблиц; и для создания новых имен объектов при переименовании объектов (например, для FakeTable или SpyProcedure).

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

person dennislloydjr    schedule 10.05.2012
comment
Спасибо Денис. Будет ли подход с асимметричным ключом, упомянутый Эдом (msdn.microsoft.com/en-us /library/ms345106.aspx), возможно, разрешить удаление требования TRUSTWORTHY ON? - person Justin Caldicott; 16.05.2012

TRUSTWORTHY ON больше не требуется. См. примечания к выпуску: http://tsqlt.org/748/tsqlt-v1-0-5873-27393-release-notes/

person James Zimmerman    schedule 19.03.2016

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

Существует способ обойти требование установить базу данных в качестве НАДЕЖНОЙ, создав асимметричный ключ — см. http://msdn.microsoft.com/en-us/library/ms345106.aspx.

Если это неприемлемо, существуют другие инструменты модульного тестирования базы данных, которые не требуют создания объектов в базе данных, например DbFit

person Ed Harper    schedule 10.05.2012