Поделиться через


Пошаговое руководство. Создание и выполнение модульного теста базы данных

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

В данном пошаговом руководстве выполняются следующие задачи.

  • Создание скрипта, содержащего схему базы данных

  • Создание проекта базы данных и импорт схемы.

  • Развертывание проекта базы данных в изолированной среде разработки

  • Создание модульных тестов базы данных

  • Определение логики теста

  • Выполнение модульных тестов базы данных

  • Добавление отрицательного модульного теста

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

Обязательные компоненты

Чтобы выполнить это пошаговое руководство, необходимо подключиться к серверу базы данных, где вы имеете разрешение на создание и развертывание базы данных. Дополнительные сведения см. в разделе Разрешения, необходимые для функций баз данных в Visual Studio.

Создание скрипта, содержащего схему базы данных

Создание скрипта, откуда можно импортировать схему

  1. В меню Файл выберите Создать и щелкните Файл.

    Появится диалоговое окно Создание файла.

  2. В списке Категории щелкните элемент Общие, если он еще не выделен.

  3. В списке Шаблоны выберите SQL-файл, а затем нажмите кнопку Открыть.

    Откроется редактор Transact-SQL.

  4. Скопируйте следующий код Transact-SQL и вставьте его в редактор Transact-SQL.

    PRINT N'Creating Sales...';
    GO
    CREATE SCHEMA [Sales]
        AUTHORIZATION [dbo];
    GO
    PRINT N'Creating Sales.Customer...';
    GO
    CREATE TABLE [Sales].[Customer] (
        [CustomerID]   INT           IDENTITY (1, 1) NOT NULL,
        [CustomerName] NVARCHAR (40) NOT NULL,
        [YTDOrders]    INT           NOT NULL,
        [YTDSales]     INT           NOT NULL
    );
    GO
    PRINT N'Creating Sales.Orders...';
    GO
    CREATE TABLE [Sales].[Orders] (
        [CustomerID] INT      NOT NULL,
        [OrderID]    INT      IDENTITY (1, 1) NOT NULL,
        [OrderDate]  DATETIME NOT NULL,
        [FilledDate] DATETIME NULL,
        [Status]     CHAR (1) NOT NULL,
        [Amount]     INT      NOT NULL
    );
    GO
    PRINT N'Creating Sales.Def_Customer_YTDOrders...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [Def_Customer_YTDOrders] DEFAULT 0 FOR [YTDOrders];
    GO
    PRINT N'Creating Sales.Def_Customer_YTDSales...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [Def_Customer_YTDSales] DEFAULT 0 FOR [YTDSales];
    GO
    PRINT N'Creating Sales.Def_Orders_OrderDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [Def_Orders_OrderDate] DEFAULT GetDate() FOR [OrderDate];
    GO
    PRINT N'Creating Sales.Def_Orders_Status...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [Def_Orders_Status] DEFAULT 'O' FOR [Status];
    GO
    PRINT N'Creating Sales.PK_Customer_CustID...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [PK_Customer_CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
    GO
    PRINT N'Creating Sales.PK_Orders_OrderID...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [PK_Orders_OrderID] PRIMARY KEY CLUSTERED ([OrderID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
    GO
    PRINT N'Creating Sales.FK_Orders_Customer_CustID...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [FK_Orders_Customer_CustID] FOREIGN KEY ([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) ON DELETE NO ACTION ON UPDATE NO ACTION;
    GO
    PRINT N'Creating Sales.CK_Orders_FilledDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [CK_Orders_FilledDate] CHECK ((FilledDate >= OrderDate) AND (FilledDate < '01/01/2020'));
    GO
    PRINT N'Creating Sales.CK_Orders_OrderDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [CK_Orders_OrderDate] CHECK ((OrderDate > '01/01/2005') and (OrderDate < '01/01/2020'));
    GO
    PRINT N'Creating Sales.uspCancelOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspCancelOrder]
    @OrderID INT
    AS
    BEGIN
    DECLARE @Delta INT, @CustomerID INT
    BEGIN TRANSACTION
        SELECT @Delta = [Amount], @CustomerID = [CustomerID]
         FROM [Sales].[Orders] WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Orders]
       SET [Status] = 'X'
    WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Customer]
       SET
       YTDOrders = YTDOrders - @Delta
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    END
    GO
    PRINT N'Creating Sales.uspFillOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspFillOrder]
    @OrderID INT, @FilledDate DATETIME
    AS
    BEGIN
    DECLARE @Delta INT, @CustomerID INT
    BEGIN TRANSACTION
        SELECT @Delta = [Amount], @CustomerID = [CustomerID]
         FROM [Sales].[Orders] WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Orders]
       SET [Status] = 'F',
           [FilledDate] = @FilledDate
    WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Customer]
       SET
       YTDSales = YTDSales - @Delta
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    END
    GO
    PRINT N'Creating Sales.uspNewCustomer...';
    GO
    CREATE PROCEDURE [Sales].[uspNewCustomer]
    @CustomerName NVARCHAR (40)
    AS
    BEGIN
    INSERT INTO [Sales].[Customer] (CustomerName) VALUES (@CustomerName);
    SELECT SCOPE_IDENTITY()
    END
    GO
    PRINT N'Creating Sales.uspPlaceNewOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspPlaceNewOrder]
    @CustomerID INT, @Amount INT, @OrderDate DATETIME, @Status CHAR (1)='O'
    AS
    BEGIN
    DECLARE @RC INT
    BEGIN TRANSACTION
    INSERT INTO [Sales].[Orders] (CustomerID, OrderDate, FilledDate, Status, Amount) 
         VALUES (@CustomerID, @OrderDate, NULL, @Status, @Amount)
    SELECT @RC = SCOPE_IDENTITY();
    UPDATE [Sales].[Customer]
       SET
       YTDOrders = YTDOrders + @Amount
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    RETURN @RC
    END
    GO
    CREATE PROCEDURE [Sales].[uspShowOrderDetails]
    @CustomerID INT=0
    AS
    BEGIN
    SELECT [C].[CustomerName], CONVERT(date, [O].[OrderDate]), CONVERT(date, [O].[FilledDate]), [O].[Status], [O].[Amount]
      FROM [Sales].[Customer] AS C
      INNER JOIN [Sales].[Orders] AS O
         ON [O].[CustomerID] = [C].[CustomerID]
      WHERE [C].[CustomerID] = @CustomerID
    END
    GO
    
  5. В меню Файл выберите пункт Сохранить SqlQuery_1.sql как.

    Откроется диалоговое окно Сохранить файл как.

  6. В поле Имя объекта введите SampleImportScript.sql.

    Этот файл можно сохранить в любом месте на компьютере. Запишите расположение файла, чтобы использовать скрипт в следующей процедуре.

  7. Нажмите кнопку Сохранить.

  8. В меню Файл выберите команду Закрыть решение.

    Затем создайте проект базы данных и импортируйте схему из только что созданного скрипта.

Создание проекта базы данных и импорт схемы

Создание проекта базы данных

  1. В меню Файл последовательно выберите команды Создать и Проект.

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

  2. В области Установленные шаблоны разверните узел База данных и щелкните SQL Server.

    Примечание

    Если вы используете Visual Studio Professional, вместо Установленных шаблонов последовательно раскройте узлы База данных и SQL Server и щелкните Дополнительно.

  3. В списке шаблонов выберите Проект базы данных SQL Server 2008.

    Примечание

    Если планируется развернуть базу данных в сервер баз данных другой версии, следует вместо этого выбрать шаблон, соответствующий целевому серверу.

  4. В поле Имя введите SimpleUnitTestDB.

  5. Установите флажок Создать каталог для решения, если он еще не установлен.

  6. Снимите флажок Добавить в систему управления версиями, если он установлен, и нажмите кнопку ОК.

    В обозревателе решений отобразится созданный проект. Далее вы импортируете схему базы данных из скрипта.

Импорт схемы базы данных из скрипта

  1. В меню Проект выберите команду Импортировать скрипт.

  2. Прочитав страницу приветствия, нажмите кнопку Далее.

  3. Нажмите кнопку Обзор и укажите путь к сохраненному файлу SampleImportScript.sql.

  4. Дважды щелкните файл SampleImportScript.sql и нажмите кнопку Готово.

    Скрипт будет импортирован, объекты, определенные в этом скрипте, — добавлены в проект базы данных.

  5. Просмотрите сводные данные и нажмите кнопку Готово, чтобы завершить операцию.

    Примечание

    Процедура Sales.uspFillOrder содержит намеренную ошибку кода, которые вы найдете и исправите далее в этой процедуре.

Анализ результирующего проекта

  1. В обозревателе решений разверните дочерний узел Объекты схемы.

  2. Исследуйте дочерние узлы, расположенные ниже узла Объекты схемы в иерархии.

    Обозреватель решений содержит файлы, которые определяют объекты базы данных.

  3. В меню Вид выберите команду Представление схемы базы данных.

  4. В представлении схемы разверните узел SimpleUnitTestDB.

  5. Исследуйте дочерние узлы, расположенные ниже узла SimpleUnitTestDB в иерархии.

    В представлении схемы содержатся все объекты, определенные в файлах, отображаемых в обозревателе решений.

Развертывание в изолированной среде разработки

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

Настройка и построение проекта базы данных

  1. В обозревателе решений щелкните проект базы данных SimpleUnitTestDB.

  2. В меню Проект выберите команду Свойства SimpleUnitTestDB.

    Появится диалоговое окно свойств проекта.

  3. Перейдите на вкладку Развертывание.

  4. В списке Настроить параметры развертывания для выберите пункт Моя изолированная среда разработки. При настройке параметров изолированной среды разработки можно использовать другие параметры развертывания, в отличие от тех, которые будут использоваться в ваших средах, например, на промежуточном или рабочем сервере.

  5. В списке Действие развертывания щелкните Создать скрипт развертывания (SQL) и развернуть в базу данных.

  6. В группе Параметры целевой базы данных нажмите кнопку Изменить.

    Появится диалоговое окно Свойства подключения.

  7. Задайте свойства подключения для базы данных, которую вы хотите создать, и нажмите кнопку ОК.

    В поле Целевое подключение отображается необходимая строка подключения.

    Предупреждение

    Вам необходимо создать базу данных на тестовом сервере, сервере разработки или на локальном компьютере.Рабочий сервер указывать не следует.

  8. В поле Имя конечной базы данных введите SimpleUnitTestDB.

  9. Нажмите кнопку Правка возле пункта Файл конфигурации развертывания.

  10. Снимите флажок Блокировать добавочное развертывание при возможности потери данных.

    Примечание

    В рамках данного пошагового руководства вы будете тестировать хранимые процедуры в пустой базе данных, которая развертывается в рамках модульного теста базы данных.Не нужно сохранять существующие данные, так как хранимые процедуры будут тестироваться в изолированной среде разработки.

  11. В меню Файл выберите команду Сохранить все.

  12. В меню Построение выберите Построить решение.

    Будет построен скрипт развертывания на основе только что заданных вами свойств. Состояние построения отображается в окне Выходные данные, а в последней строке должно быть выведено сообщение Построение: успешно и без изменений: 1.

    Примечание

    Если окно Выходные данные не появится, откройте меню Вид и выберите команду Выходные данные.

Развертывание проекта базы данных

  1. В обозревателе решений щелкните проект базы данных SimpleUnitTestDB.

  2. В меню Построение выберите команду Развернуть SimpleUnitTestDB.

    Предупреждение

    Вам необходимо снова выполнить это развертывание на тестовом сервере, сервере разработки или на локальном компьютере.Рабочий сервер указывать не следует.

    Проект базы данных развертывается в новой базе данных. Состояние развертывания отображается в окне Выходные данные, а в последней строке должно отобразиться сообщение Развертывание: успешно: 1. Кроме того, можно определить план создания данных, чтобы создать тестовые данные в базе данных. В рамках данного пошагового руководства вы тестируете очень простую базу данных, для которой не нужно создавать данные.

Создание модульных тестов базы данных

Создание модульного теста базы данных для хранимых процедур

  1. В меню Вид выберите команду Представление схемы базы данных.

  2. В представлении схемы разверните последовательно узлы Схемы, Sales, Программируемость и Хранимые процедуры.

  3. Щелкните правой кнопкой мыши хранимую процедуру uspNewCustomer и выберите команду Создать модульные тесты.

    Появится диалоговое окно Создать модульные тесты.

  4. Установите флажки для всех пяти хранимых процедур: Sales.uspCancelOrder, Sales.uspFillOrder, Sales.uspNewCustomer, Sales.uspPlaceNewOrder и Sales.uspShowOrderDetails.

  5. В Проект щелкните Создать новый тестовый проект Visual C#.

  6. Примите имена по умолчанию для имени проекта и имени класса и нажмите кнопку ОК.

    Откроется диалоговое окно Конфигурация проекта "TestProject1".

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

    Примечание

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

  8. В Развертывание установите флажок Автоматически развертывать проект базы данных перед выполнением модульных тестов.

  9. В Проект базы данных щелкните SimpleUnitTestDB.dbproj.

  10. В Конфигурация развертывания щелкните Отладка.

    Вы можете также создавать тестовые данные в рамках модульных тестов базы данных. В рамках этого пошагового руководства данный шаг пропускается, так как тесты будут создавать собственные данные.

  11. Нажмите кнопку ОК.

    Выполняется построение тестового проекта и отображается конструктор модульных тестов базы данных. Затем вы обновляете логику теста в скрипте Transact-SQL модульных тестов.

Определение логики теста

Это очень простая база данных включает две таблицы: Customer и Order. База данных обновляется с использованием следующих хранимых процедур:

  • uspNewCustomer - данная хранимая процедура добавляет запись в таблице Customer, которая настраивает столбцы клиента YTDOrders и YTDSales на нулевое значение.

  • uspPlaceNewOrder - данная хранимая процедура добавляет запись в таблице Orders для указанного клиента и обновляет значение YTDOrders в соответствующей записи в таблице Customer.

  • uspFillOrder - данная хранимая процедура обновляет запись в таблице Orders путем изменения статуса с "О" на "F" и увеличивает сумму YTDSales в соответствующей записи в таблице Customer.

  • uspCancelOrder - данная хранимая процедура обновляет запись в таблице Orders путем изменения статуса с "О" на "X" и уменьшает сумму YTDOrders в соответствующей записи в таблице Customer.

  • uspShowOrderDetails - данная хранимая процедура объединяет таблицу Orders с таблицей Custom и отображает записи для определенного клиента.

Примечание

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

Тесты предполагают, что база данных начинается с чистого состояния. Вы создаете тесты, которые проверяют следующие условия:

  • uspNewCustomer - проверка того, что таблица Customer содержит одну строку после запуска хранимой процедуры.

  • uspPlaceNewOrder - размещение заказа на 100 долларов США для клиента, для которого CustomerID имеет значение 1. Убедитесь, что сумма YTDOrders для данного клиента равна 100 и что сумма YTDSales равна 0.

  • uspFillOrder - размещение заказа на 50 долларов США для клиента, для которого CustomerID имеет значение 1. Выполните этот заказ. Убедитесь, что суммы YTDOrders и YTDSales равны 50.

  • uspShowOrderDetails - размещение заказов на 100, 50 и 5 долларов США для клиента, для которого CustomerID имеет значение 1. Убедитесь, что процедура uspShowOrderDetails возвращает правильное количество столбцов и что результирующий набор содержит ожидаемую контрольную сумму.

Примечание

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

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

  1. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspNewCustomerTest и убедитесь, что в смежном списке выделен элемент Тест.

    После выполнения предыдущего шага можно создать сценарий теста для действия теста в рамках модульного теста.

  2. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    -- database unit test for Sales.uspNewCustomer
    DECLARE @RC AS INT, @CustomerName AS NVARCHAR (40);
    
    SELECT @RC = 0,
           @CustomerName = 'Fictitious Customer';
    
    EXECUTE @RC = [Sales].[uspNewCustomer] @CustomerName;
    
    SELECT * FROM [Sales].[Customer];
    
  3. В области Условия теста выберите условие теста "С неопределенным результатом" и щелкните Удалить условие теста (x).

  4. В области Условия теста выделите значение в списке Число строк и щелкните Добавить условие теста (+).

  5. В окне Свойства задайте для свойства Число строк значение 1.

  6. В меню Файл выберите команду Сохранить все.

    Затем вы определяете логику модульного теста для процедуры uspPlaceNewOrder.

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

  1. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspPlaceNewOrderTest и убедитесь, что в смежном списке выделен элемент Тест.

    После выполнения этого шага можно создать сценарий теста для действия теста в рамках модульного теста.

  2. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    -- database unit test for Sales.uspPlaceNewOrder
    DECLARE @RC AS INT, @CustomerID AS INT, @Amount AS INT, @OrderDate AS DATETIME, @Status AS CHAR (1);
    DECLARE @CustomerName AS NVARCHAR(40);
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @OrderDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- place an order for that customer
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, @Amount, @OrderDate, @Status;
    
    -- verify that the YTDOrders value is correct.
    SELECT @RC = [YTDOrders] FROM [Sales].[Customer] WHERE [CustomerID] = @CustomerID
    
    SELECT @RC AS RC
    
  3. В области Условия теста выберите условие теста "С неопределенным результатом" и щелкните Удалить условие теста (x).

  4. В области Условия теста выделите значение в списке Скалярное значение и щелкните Добавить условие теста (+).

  5. В окне Свойства задайте для свойства Ожидаемое значение значение 100.

  6. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspPlaceNewOrderTest и убедитесь, что в смежном списке выделен элемент Перед тестированием.

    После выполнения этого шага можно указать операторы, которые переводят данные в состояние, необходимое для выполнения теста. В этом примере необходимо создать запись клиента перед размещением заказа.

  7. Чтобы создать сценарий, выполняемый перед тестированием, щелкните ссылку Щелкните здесь, чтобы создать.

  8. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    /*
    Add Transact-SQL statements here that you want to run before
    the test script is run.
    */
    -- Add a customer for this test with the name 'Fictitious Customer'
    DECLARE @NewCustomerID AS INT, @CustomerID AS INT, @RC AS INT, @CustomerName AS NVARCHAR (40);
    
    SELECT @RC = 0,
           @NewCustomerID = 0,
       @CustomerID = 0,
           @CustomerName = N'Fictitious Customer';
    
    IF NOT EXISTS(SELECT * FROM [Sales].[Customer] WHERE CustomerName = @CustomerName)
    BEGIN
    EXECUTE @NewCustomerID = [Sales].[uspNewCustomer] @CustomerName;
    END
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- delete any old records in the Orders table and clear out the YTD Sales/Orders fields
    DELETE from [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    UPDATE [Sales].[Customer] SET YTDOrders = 0, YTDSales = 0 WHERE [CustomerID] = @CustomerID;
    
  9. В меню Файл выберите команду Сохранить все.

    Затем вы создаете модульный тест для процедуры uspFillOrder.

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

  1. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspFillOrderTest и убедитесь, что в смежном списке выделен элемент Тест.

    После выполнения этого шага можно создать сценарий теста для действия теста в рамках модульного теста.

  2. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    -- database unit test for Sales.uspFillOrder
    DECLARE @RC AS INT, @CustomerID AS INT, @Amount AS INT, @FilledDate AS DATETIME, @Status AS CHAR (1);
    DECLARE @CustomerName AS NVARCHAR(40), @OrderID AS INT;
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @OrderID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @FilledDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    -- Get the most recently added order.
    SELECT @OrderID = MAX([OrderID]) FROM [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    
    -- fill an order for that customer
    EXECUTE @RC = [Sales].[uspFillOrder] @OrderID, @FilledDate;
    
    -- verify that the YTDOrders value is correct.
    SELECT @RC = [YTDSales] FROM [Sales].[Customer] WHERE [CustomerID] = @CustomerID
    
    SELECT @RC AS RC;
    
  3. В области Условия теста выберите условие теста "С неопределенным результатом" и щелкните Удалить условие теста (x).

  4. В области Условия теста выделите значение в списке Скалярное значение и щелкните Добавить условие теста (+).

  5. В окне Свойства задайте для свойства Ожидаемое значение значение 100.

  6. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspFillOrderTest и убедитесь, что в смежном списке выделен элемент Перед тестированием. После выполнения этого шага можно указать операторы, которые переводят данные в состояние, необходимое для выполнения теста. В этом примере необходимо создать запись клиента перед размещением заказа.

  7. Чтобы создать сценарий, выполняемый перед тестированием, щелкните ссылку Щелкните здесь, чтобы создать.

  8. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    /*
    Add Transact-SQL statements here that you want to run before
    the test script is run.
    */
    BEGIN TRANSACTION
    
    -- Add a customer for this test with the name 'CustomerB'
    DECLARE @NewCustomerID AS INT, @RC AS INT, @CustomerName AS NVARCHAR (40);
    
    SELECT @RC = 0,
           @NewCustomerID = 0,
           @CustomerName = N'Fictitious Customer';
    
    IF NOT EXISTS(SELECT * FROM [Sales].[Customer] WHERE CustomerName = @CustomerName)
    BEGIN
    EXECUTE @NewCustomerID = [Sales].[uspNewCustomer] @CustomerName;
    END
    
    DECLARE @CustomerID AS INT, @Amount AS INT, @OrderDate AS DATETIME, @Status AS CHAR (1);
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @OrderDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- delete any old records in the Orders table and clear out the YTD Sales/Orders fields
    DELETE from [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    UPDATE [Sales].[Customer] SET YTDOrders = 0, YTDSales = 0 WHERE [CustomerID] = @CustomerID;
    
    -- place an order for that customer
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, @Amount, @OrderDate, @Status;
    
    COMMIT TRANSACTION
    
  9. В меню Файл выберите команду Сохранить все.

    Теперь все готово к запуску тестов.

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

  1. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspShowOrderDetailsTest и убедитесь, что в смежном списке выделен элемент Тест.

    После выполнения этого шага можно создать сценарий теста для действия теста в рамках модульного теста.

  2. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    -- database unit test for Sales.uspFillOrder
    DECLARE @RC AS INT, @CustomerID AS INT, @Amount AS INT, @FilledDate AS DATETIME, @Status AS CHAR (1);
    DECLARE @CustomerName AS NVARCHAR(40), @OrderID AS INT;
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @OrderID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @FilledDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- fill an order for that customer
    EXECUTE @RC = [Sales].[uspShowOrderDetails] @CustomerID;
    
    SELECT @RC AS RC;
    
  3. В области Условия теста выберите условие теста "С неопределенным результатом" и щелкните Удалить условие теста (x).

  4. В области Условия теста выделите значение в списке Ожидаемая схема и щелкните Добавить условие теста (+).

  5. В окне Свойства в свойстве Конфигурация нажмите кнопку обзора ("...").

  6. В диалоговом окне Конфигурация expectedSchemaCondition1 укажите подключение к базе данных.

  7. Нажмите Извлечь.

    Выполняется код Transact-SQL модульного теста, и полученная схема отображается в диалоговом окне. Так как код, выполняемый перед тестированием, не исполнялся, данные не возвращаются. Так как вы только проверяете схему, а не данные, этого достаточно.

  8. Нажмите кнопку ОК.

    Ожидаемая схема сохраняется с условием теста.

  9. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspShowOrderDetailsTest и убедитесь, что в смежном списке выделен элемент Перед тестированием. После выполнения этого шага можно указать операторы, которые переводят данные в состояние, необходимое для выполнения теста. В этом примере необходимо создать запись клиента перед размещением заказа.

  10. Чтобы создать сценарий, выполняемый перед тестированием, щелкните ссылку Щелкните здесь, чтобы создать.

  11. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    /*
    Add Transact-SQL statements here that you want to run before
    the test script is run.
    */
    BEGIN TRANSACTION
    
    -- Add a customer for this test with the name 'FictitiousCustomer'
    DECLARE @NewCustomerID AS INT, @RC AS INT, @CustomerName AS NVARCHAR (40);
    
    SELECT @RC = 0,
           @NewCustomerID = 0,
           @CustomerName = N'Fictitious Customer';
    
    IF NOT EXISTS(SELECT * FROM [Sales].[Customer] WHERE CustomerName = @CustomerName)
    BEGIN
    EXECUTE @NewCustomerID = [Sales].[uspNewCustomer] @CustomerName;
    END
    
    
    DECLARE @CustomerID AS INT, @Amount AS INT, @OrderDate AS DATETIME, @Status AS CHAR (1);
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @CustomerName = N'Fictitious Customer',
           @OrderDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- delete any old records in the Orders table and clear out the YTD Sales/Orders fields
    DELETE from [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    UPDATE [Sales].[Customer] SET YTDOrders = 0, YTDSales = 0 WHERE [CustomerID] = @CustomerID;
    
    -- place 3 orders for that customer
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 100, @OrderDate, @Status;
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 50, @OrderDate, @Status;
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 5, @OrderDate, @Status;
    
    COMMIT TRANSACTION
    
  12. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspShowOrderDetailsTest и щелкните элемент Тест в смежном списке.

    Это необходимо сделать, так как нужно применить условие контрольной суммы к тесту, а не перед тестированием.

  13. В области Условия теста выделите значение в списке Контрольная сумма данных и щелкните Добавить условие теста (+).

  14. В окне Свойства в свойстве Конфигурация нажмите кнопку обзора ("...").

  15. В диалоговом окне Конфигурация checksumCondition1 укажите подключение к базе данных.

  16. Замените код Transact-SQL в диалоговом окне следующим кодом:

    BEGIN TRANSACTION
    
    -- Add a customer for this test with the name 'CustomerB'
    DECLARE @NewCustomerID AS INT, @RC AS INT, @CustomerName AS NVARCHAR (40);
    
    SELECT @RC = 0,
           @NewCustomerID = 0,
           @CustomerName = N'Fictitious Customer';
    
    IF NOT EXISTS(SELECT * FROM [Sales].[Customer] WHERE CustomerName = @CustomerName)
    BEGIN
    EXECUTE @NewCustomerID = [Sales].[uspNewCustomer] @CustomerName;
    END
    
    
    DECLARE @CustomerID AS INT, @Amount AS INT, @OrderDate AS DATETIME, @Status AS CHAR (1);
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @CustomerName = N'Fictitious Customer',
           @OrderDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- delete any old records in the Orders table and clear out the YTD Sales/Orders fields
    DELETE from [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    UPDATE [Sales].[Customer] SET YTDOrders = 0, YTDSales = 0 WHERE [CustomerID] = @CustomerID;
    
    
    
    -- place 3 orders for that customer
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 100, @OrderDate, @Status;
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 50, @OrderDate, @Status;
    EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 5, @OrderDate, @Status;
    
    
    COMMIT TRANSACTION
    
    
    -- database unit test for Sales.uspFillOrder
    DECLARE @FilledDate AS DATETIME;
    DECLARE @OrderID AS INT;
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @OrderID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @FilledDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- fill an order for that customer
    EXECUTE @RC = [Sales].[uspShowOrderDetails] @CustomerID;
    
    SELECT @RC AS RC;
    

    Код объединяет код Transact-SQL перед тестированием с кодом Transact-SQL в самом тесте. Вам необходимы оба вида кода, чтобы возвращать результаты, совпадающие с теми, которые будут возвращаться при его выполнении.

  17. Нажмите Извлечь.

    Выполняется указанный код Transact-SQL, и для возвращенных данных рассчитывается контрольная сумма.

  18. Нажмите кнопку ОК.

    Рассчитанная контрольная сумма сохраняется с условием теста. Ожидаемая контрольная сумма отображается в столбце "Значение" условия теста "Контрольная сумма данных".

  19. В меню Файл выберите команду Сохранить все.

    Теперь все готово к запуску тестов.

Выполнение модульного теста базы данных

Выполнение модульных тестов базы данных

  1. В меню Тест выберите Окна, а затем команду Представление теста.

  2. В окне "Представление теста" щелкните Обновить на панели инструментов, чтобы обновить список тестов.

    Окно Представление теста содержит список тестов, созданных ранее в ходе выполнения этого пошагового руководства и к которым были добавлены операторы Transact-SQL и условия тестов. Тест с именем TestMethod1 пустой и не используется в данном пошаговом руководстве.

  3. Щелкните правой кнопкой мыши Sales_uspShowOrderDetailsTest и выберите команду Выполнить выбранное.

    Visual Studio использует привилегированный контекст, заданный при подключении к базе данных и применении плана создания данных. Затем Visual Studio переключается в контекст выполнения перед выполнением содержащегося в тесте скрипта Transact-SQL. Наконец, Visual Studio оценивает результаты скрипта Transact-SQL с использованием заданных условий теста и отображает сведения о том, пройден ли тест, в окне Результаты теста.

  4. Просмотрите результаты в окне Результаты теста.

    Тест пройден, а это означает, что в результате выполнения инструкции SELECT возвращена одна строка.

  5. Повторите шаг 3 для тестов Sales_uspPlaceNewOrderTest, Sales_uspFillOrderTest и Sales_uspShowOrderDetailsTest. Варианты результатов представлены ниже.

    Тест

    Ожидаемый результат

    Sales_uspPlaceNewOrderTest

    Пройден

    Sales_uspShowOrderDetailsTest

    Пройден

    Sales_uspFillOrderTest

    Произошла следующая ошибка: "ScalarValueCondition Condition (scalarValueCondition2) не пройден. Результирующий набор: {0}; строка: {1}; столбец: {2}. Значения не совпадают (фактическое: '-100'; ожидаемое: '100')." Эта ошибка происходит, так как определение хранимой процедуры содержит небольшую ошибку.

    Затем вы исправляете ошибку и выполняете тест повторно.

Исправление ошибки в процедуре Sales.uspFillOrder

  1. В окне Представление схемы щелкните дважды хранимую процедуру uspFillOrder, чтобы открыть ее определение в редакторе Transact-SQL.

  2. В определении найдите следующий оператор Transact-SQL:

    UPDATE [Sales].[Customer]
       SET
       YTDSales = YTDSales - @Delta
        WHERE [CustomerID] = @CustomerID
    
  3. Измените предложение SET в операторе в соответствии со следующими операторами.

    UPDATE [Sales].[Customer]
       SET
       YTDSales = YTDSales + @Delta
        WHERE [CustomerID] = @CustomerID
    
  4. В меню Файл выберите Сохранить uspFillOrder.proc.sql.

  5. В окне Представление теста щелкните правой кнопкой мыши Sales_uspFillOrderTest и выберите пункт Выполнить выделенное.

    Тест проходит.

Добавление отрицательного модульного теста

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

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

  • Обновить хранимую процедуру, чтобы проверить срабатывание условий ошибки

  • Определить новый модульный тест

  • Изменить код для модульного теста, чтобы задать, что он должен возвращать ошибку

  • Выполнить модульный тест

Обновление хранимой процедуры

  1. В представлении схемы последовательно разверните узлы "SimpleUnitTestDB", "Схемы", "Sales", "Программируемость" и "Хранимые процедуры", после чего дважды щелкните uspCancelOrder.

  2. В редакторе Transact-SQL обновите определение процедуры, заменив его следующим кодом.

    CREATE PROCEDURE [Sales].[uspCancelOrder]
    @OrderID INT
    AS
    BEGIN
        DECLARE @Delta INT, @CustomerID INT, @PriorStatus CHAR(1)
        BEGIN TRANSACTION
            BEGIN TRY
                IF (NOT EXISTS(SELECT [CustomerID] from [Sales].[Orders] WHERE [OrderID] = @OrderID))
                BEGIN
                    -- Specify WITH LOG option so that the error is
                    -- written to the application log.
                    RAISERROR( 'That order does not exist.', -- Message text
                               16, -- severity
                                1 -- state
                            ) WITH LOG;
                END
    
                SELECT @Delta = [Amount], @CustomerID = [CustomerID], @PriorStatus = [Status]
                 FROM [Sales].[Orders] WHERE [OrderID] = @OrderID
    
                IF @PriorStatus <> 'O' 
                BEGIN
                    -- Specify WITH LOG option so that the error is
                    -- written to the application log.
                    RAISERROR ( 'You can only cancel open orders.', -- Message text
                                16, -- Severity
                                1 -- State
                                ) WITH LOG;
                END
                ELSE
                BEGIN
                    -- If we make it to here, then we can cancel the order. Update the status to 'X' first...
                    UPDATE [Sales].[Orders]
                       SET [Status] = 'X'
                    WHERE [OrderID] = @OrderID
                    -- and then remove the amount from the YTDOrders for the customer
                    UPDATE [Sales].[Customer]
                           SET
                               YTDOrders = YTDOrders - @Delta
                    WHERE [CustomerID] = @CustomerID
                    COMMIT TRANSACTION
                    RETURN 1; -- indicate success
                END
            END TRY
            BEGIN CATCH
                DECLARE @ErrorMessage NVARCHAR(4000);
                DECLARE @ErrorSeverity INT;
                DECLARE @ErrorState INT;
    
                SELECT @ErrorMessage = ERROR_MESSAGE(),
                       @ErrorSeverity = ERROR_SEVERITY(),
                       @ErrorState = ERROR_STATE();
    
                ROLLBACK TRANSACTION
                -- Use RAISERROR inside the CATCH block to return
                -- error information about the original error that
                -- caused execution to jump to the CATCH block.
                RAISERROR (@ErrorMessage, -- Mesasge text
                           @ErrorSeverity, -- Severity
                           @ErrorState -- State
                          );
                RETURN 0; -- indicate failure
            END CATCH;
    END
    
  3. В меню Файл выберите Сохранить uspCancelOrder.proc.sql.

  4. В обозревателе решений щелкните правой кнопкой SimpleUnitTestDB и выберите пункт Развернуть.

    Вы развертываете обновления для хранимой процедуры uspCancelOrder. Другие объекты не изменялись, поэтому обновляется только эта хранимая процедура.

    Затем вы определяете соответствующий модульный тест для этой процедуры.

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

  1. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspCancelOrderTest и убедитесь, что в смежном списке выделен элемент Тест.

    После выполнения этого шага можно создать сценарий теста для действия теста в рамках модульного теста.

  2. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    -- database unit test for Sales.uspFillOrder
    DECLARE @RC AS INT, @CustomerID AS INT, @Amount AS INT, @FilledDate AS DATETIME, @Status AS CHAR (1);
    DECLARE @CustomerName AS NVARCHAR(40), @OrderID AS INT;
    
    SELECT @RC = 0,
           @CustomerID = 0,
           @OrderID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @FilledDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    -- Get the most recently added order.
    SELECT @OrderID = MAX([OrderID]) FROM [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    
    -- try to cancel an order for that customer that has already been filled
    EXECUTE @RC = [Sales].[uspCancelOrder] @OrderID;
    
    SELECT @RC AS RC;
    
  3. В области Условия теста выберите условие теста "С неопределенным результатом" и щелкните Удалить условие теста (x).

  4. В области Условия теста выделите значение в списке Скалярное значение и щелкните Добавить условие теста (+).

  5. В окне Свойства задайте для свойства Ожидаемое значение значение 0.

  6. В области переходов конструктора модульных тестов базы данных щелкните Sales_uspCancelOrderTest и убедитесь, что в смежном списке выделен элемент Перед тестированием. После выполнения этого шага можно указать операторы, которые переводят данные в состояние, необходимое для выполнения теста. В этом примере необходимо создать запись клиента перед размещением заказа.

  7. Чтобы создать сценарий, выполняемый перед тестированием, щелкните ссылку Щелкните здесь, чтобы создать.

  8. Обновите операторы Transact-SQL в редакторе Transact-SQL в соответствии со следующими операторами.

    /*
    Add Transact-SQL statements here that you want to run before
    the test script is run.
    */
    BEGIN TRANSACTION
    
    -- Add a customer for this test with the name 'CustomerB'
    DECLARE @NewCustomerID AS INT, @RC AS INT, @CustomerName AS NVARCHAR (40);
    
    SELECT @RC = 0,
           @NewCustomerID = 0,
           @CustomerName = N'Fictitious Customer';
    
    IF NOT EXISTS(SELECT * FROM [Sales].[Customer] WHERE CustomerName = @CustomerName)
    BEGIN
    EXECUTE @NewCustomerID = [Sales].[uspNewCustomer] @CustomerName;
    END
    
    DECLARE @CustomerID AS INT, @Amount AS INT, @OrderDate AS DATETIME, @FilledDate AS DATETIME, @Status AS CHAR (1), @OrderID AS INT;
    
    SELECT @RC = 0,
           @CustomerID = 0,
       @OrderID = 0,
           @CustomerName = N'Fictitious Customer',
           @Amount = 100,
           @OrderDate = getdate(),
       @FilledDate = getdate(),
           @Status = 'O';
    
    -- NOTE: Assumes that you inserted a Customer record with CustomerName='Fictitious Customer' in the pre-test script.
    SELECT @CustomerID = [CustomerID] FROM [Sales].[Customer] WHERE [CustomerName] = @CustomerName;
    
    -- delete any old records in the Orders table and clear out the YTD Sales/Orders fields
    DELETE from [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
    UPDATE [Sales].[Customer] SET YTDOrders = 0, YTDSales = 0 WHERE [CustomerID] = @CustomerID;
    
    -- place an order for that customer
    EXECUTE @OrderID = [Sales].[uspPlaceNewOrder] @CustomerID, @Amount, @OrderDate, @Status;
    
    -- fill the order for that customer
    EXECUTE @RC = [Sales].[uspFillOrder] @OrderID, @FilledDate;
    
    COMMIT TRANSACTION
    
  9. В меню Файл выберите команду Сохранить все.

    Теперь все готово к запуску тестов.

Выполнение модульных тестов базы данных

  1. В окне Представление теста щелкните правой кнопкой мыши Sales_uspCancelOrderTest и выберите пункт Выполнить выделенное.

  2. Просмотрите результаты в окне Результаты теста.

    Тест возвращает следующую ошибку:

    Test method TestProject1.DatabaseUnitTests1.Sales_uspCancelOrderTest threw exception: System.Data.SqlClient.SqlException: You can only cancel open orders.

    Затем вы изменяете код, чтобы указать, что ожидается исключение.

Изменение кода для модульного теста

  1. В обозревателе решений разверните TestProject1, щелкните правой кнопкой мыши DatabaseUnitTests1 и выберите команду Перейти к коду.

  2. В редакторе кода перейдите к методу Sales_uspCancelOrderTest. Измените атрибуты метода в соответствии с приведенным ниже кодом:

            [TestMethod(), ExpectedSqlException(Severity=16, MatchFirstError=false, State=1)]
            public void Sales_uspCancelOrderTest()
    

    Вы указываете, что должно произойти определенное исключение SQL. Можно дополнительно указать определенный номер ошибки. Если этот атрибут не добавляется, модульный тест возвращает ошибку, и в окне «Результаты теста» отображается сообщение.

  3. В меню "Файл" щелкните "Сохранить DatabaseUnitTests1.cs".

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

Повторное выполнение модульных тестов базы данных

  1. В окне Представление теста щелкните правой кнопкой мыши Sales_uspCancelOrderTest и выберите пункт Выполнить выделенное.

  2. Просмотрите результаты в окне Результаты теста.

    Тест проходит успешно, т.е. процедура вернула ошибку, когда она должна была ее вернуть.

Следующие действия

В типичном проекте были бы определены дополнительные модульные тесты для проверки того, что все критичные объекты базы данных работают правильно. Когда набор тестов готов, их возвращают в систему управления версиями для совместного использования с остальными участниками рабочей группы.

После определения базового плана можно создавать и изменять объекты базы данных и затем создавать связанные с ними тесты для проверки того, не нарушили ли изменения ожидаемое поведение.

См. также

Задачи

Практическое руководство. Создание пустого модульного теста базы данных

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

Основные понятия

Создание и определение модульных тестов базы данных

Проверка кода базы данных при помощи модульных тестов

Создание данных теста для баз данных с помощью генераторов данных