Модульное тестирование с tSQLt на вычисляемых столбцах - PullRequest
6 голосов
/ 23 февраля 2012

Я писал некоторые модульные тесты базы данных tSQLt (через Red Gate SQL Test) для процедур, которые в последнее время вызывают таблицы, содержащие (сохраняемые) вычисляемые столбцы, и отмечают, что если я использую FakeTable SP, я обнаружу, что вычисленные столбцыне заселены (они оцениваются как нулевые).Вычисляемый столбец является ключом к тесту, поэтому я не могу просто проигнорировать столбец в тесте и предпочел бы не дублировать логику.

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

На практике я обошел эту проблему, не используя FakeTable, а используя (частичный) оператор транзакции отката в концетеста (согласно сообщению в блоге на http://sqlity.net/en/585/how-to-rollback-in-procedures/) или явное удаление значений теста.

Я уверен, что должен быть лучший способ кодирования этого теста, и приветствую любые предложения.

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Вы должны отделить логику в вычисляемом столбце от логики в процедуре при тестировании.Процедура будет собирать информацию в этом столбце и действовать в соответствии с ней.Процедура не должна заботиться о том, чтобы столбец был вычисляемым или реальным столбцом.Это означает, что в вашем тесте вы можете жестко закодировать значение для этого столбца.FakeTable делает это возможным, превращая любой вычисляемый столбец в реальный столбец.

В другом наборе тестов вы можете (и должны) проверить, что вычисляемый столбец вычислен правильно.Для этого доступно дополнение к FakeTable.Это сохраняет вычисляемое свойство таблицы.Вам необходимо установить для параметра @ComputedColumn EXECUTE tSQLt.FakeTable значение 1. (http://tsqlt.org/user-guide/isolating-dependencies/faketable/)

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

3 голосов
/ 07 марта 2012

В списке рассылки доступно предварительное обновление для tSQLt: http://groups.google.com/group/tsqlt

Предварительный выпуск содержит функции для сохранения вычисляемых столбцов или значений по умолчанию во время FakeTable.

Примеры:
EXEC tSQLt.FakeTable 'dbo.tst1', @ComputedColumns = 1;
EXEC tSQLt.FakeTable 'dbo.tst1', @Defaults = 1;

Они будут готовы к официальному выпуску в ближайшее время.

...