Использование TSQLUnit для тестирования триггеров INSTEAD OF - PullRequest
1 голос
/ 28 апреля 2010

У меня есть триггер INSTEAD OF для таблицы в моей базе данных SQL Server 2005, которая проверяет несколько входящих значений. Если входящее значение недопустимо, возникает ошибка и откат транзакции. В противном случае запись вставляется.

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

Кто-нибудь имел успех с этим? Если да, то как ты это сделал?

Если это невозможно с TSQLUnit, как вы тестируете свои триггеры? Или ты их вообще тестируешь?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Существует еще одна инфраструктура модульного тестирования TSQL, которая называется TST http://tst.codeplex.com/, которая предположительно позволяет тестировать код, который имеет свои собственные транзакции. Из документов TST:

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

Я не использовал этот фреймворк, но натолкнулся на него (и ваши вопросы) при исследовании этой темы.

0 голосов
/ 06 июня 2010

Я не знаю, является ли это TSQLUnit или просто стандартным поведением SQL, которое вы видите.

Исключением триггера в SQL Server 2000 и более ранних версиях является пакетное прерывание в ROLLBACK, поскольку @@TRANCOUNT = 0

С TRY / CATCH в SQL Server 2005 поведение меняется, и клиент должен обрабатывать его правильно. Сказав это, я бы тоже обернул внешний вызов в TRY / CATCH.

Предложения:

  • проверьте состояние данных до и после, чтобы увидеть, что у вас есть
  • использовать хранимую процедуру (что вы делаете в любом случае)
  • используйте TRY / CATCH
...