Bagikan melalui


Panduan: Membuat dan Menjalankan Pengujian Unit SQL Server

Dalam panduan ini, Anda membuat pengujian unit SQL Server yang memverifikasi perilaku beberapa prosedur tersimpan. Anda membuat pengujian unit SQL Server untuk membantu mengidentifikasi cacat kode yang dapat menyebabkan perilaku aplikasi yang salah. Anda dapat menjalankan pengujian unit SQL Server dan pengujian aplikasi sebagai bagian dari rangkaian pengujian otomatis.

Dalam panduan ini, Anda melakukan tugas berikut:

Setelah salah satu pengujian unit mendeteksi kesalahan dalam prosedur tersimpan, Anda memperbaiki kesalahan tersebut dan menjalankan kembali pengujian Anda.

Prasyarat

Untuk menyelesaikan panduan ini, Anda harus dapat menyambungkan ke server database (atau database LocalDB) tempat Anda memiliki izin untuk membuat dan menyebarkan database. Untuk informasi selengkapnya, lihat Izin yang Diperlukan untuk Fitur Database Visual Studio.

Membuat Skrip yang Berisi Skema Database

Untuk membuat skrip tempat Anda dapat mengimpor skema

  1. Pada menu File , arahkan ke Baru, lalu klik File.

    Kotak dialog File Baru muncul.

  2. Di daftar Kategori , klik Umum jika belum disorot.

  3. Di daftar Templat , klik File Sql, lalu klik Buka.

    Editor Transact-SQL terbuka.

  4. Salin kode Transact-SQL berikut, dan tempelkan ke editor 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/2030'));  
    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/2030'));  
    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);  
    RETURN 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. Simpan file. Catat lokasi karena Anda harus menggunakan skrip ini di prosedur berikutnya.

  6. Pada menu File , klik Tutup Solusi.

    Selanjutnya Anda membuat proyek database dan mengimpor skema dari skrip yang telah Anda buat.

Membuat Proyek Database dan Mengimpor Skema

Untuk membuat proyek database

  1. Pada menu File , arahkan ke Baru, dan klik Proyek.

    Kotak dialog Proyek Baru muncul.

  2. Di bawah Templat Terinstal, pilih simpul SQL Server, lalu pilih SQL Server Proyek Database.

  3. Di Nama, ketik SimpleUnitTestDB.

  4. Pilih kotak centang Buat direktori untuk solusi jika belum dipilih.

  5. Kosongkan kotak centang Tambahkan ke Kontrol Sumber jika belum dikosongkan, dan klik OK.

    Proyek database dibuat dan muncul di Penjelajah Solusi. Selanjutnya Anda mengimpor skema database dari skrip.

Untuk mengimpor skema database dari skrip

  1. Pada menu Proyek , klik Impor lalu Skrip (*.sql).

  2. Klik Berikutnya setelah Anda membaca halaman Selamat Datang.

  3. Klik Telusuri, dan buka direktori tempat Anda menyimpan file .sql.

  4. Klik dua kali file .sql, dan klik Selesai.

    Skrip diimpor, dan objek yang ditentukan dalam skrip tersebut ditambahkan ke proyek database Anda.

  5. Tinjau ringkasan, lalu klik Selesai untuk menyelesaikan operasi.

    Catatan

    Prosedur Sales.uspFillOrder berisi kesalahan pengkodian yang disengaja yang akan Anda temukan dan perbairah nanti dalam prosedur ini.

Untuk memeriksa proyek yang dihasilkan

  1. Dalam Penjelajah Solusi, periksa file skrip yang diimpor ke dalam proyek.

  2. Di SQL Server Object Explorer, lihat database di simpul Proyek.

Menyebarkan ke LocalDB

Secara default, saat Anda menekan F5, Anda menyebarkan (atau menerbitkan) database ke database LocalDB. Anda bisa mengubah lokasi database dengan masuk ke tab Debug dari halaman properti proyek dan mengubah string koneksi.

Membuat Pengujian Unit SQL Server

Untuk membuat pengujian unit SQL Server untuk prosedur tersimpan

  1. Dalam SQL Server Object Explorer, perluas simpul proyek untuk SimpleUnitTestDB lalu perluas Progammability lalu node Prosedur Tersimpan.

  2. Klik kanan salah satu prosedur tersimpan, dan klik Buat Pengujian Unit untuk menampilkan kotak dialog Buat Pengujian Unit .

  3. Pilih kotak centang untuk kelima prosedur tersimpan: Sales.uspCancelOrder, Sales.uspFillOrder, Sales.uspNewCustomer, Sales.uspPlaceNewOrder, dan Sales.uspShowOrderDetails.

  4. Di daftar drop-down Project , pilih Buat proyek pengujian Visual C# baru.

  5. Terima nama default untuk nama proyek dan nama kelas, dan klik OK.

  6. Dalam kotak dialog konfigurasi pengujian, dalam kotak dialog Jalankan pengujian unit menggunakan koneksi data berikut, tentukan koneksi ke database yang Anda sebarkan sebelumnya dalam panduan ini. Misalnya, jika Anda menggunakan lokasi penyebaran default, yaitu LocalDB, Anda akan mengklik Koneksi Baru tentukan (LocalDB)\Projects. Lalu, pilih nama database. Kemudian, klik OK untuk menutup kotak dialog Properti Koneksi .

    Catatan

    Jika Anda harus menguji tampilan atau prosedur tersimpan yang memiliki izin terbatas, Anda biasanya akan menentukan koneksi tersebut dalam langkah ini. Anda kemudian akan menentukan koneksi sekunder, dengan izin yang lebih luas, untuk memvalidasi pengujian. Jika Anda memiliki koneksi sekunder, Anda harus menambahkan pengguna tersebut ke proyek database, dan membuat login untuk pengguna tersebut dalam skrip pra-penyebaran.

  7. Dalam kotak dialog konfigurasi pengujian, di bagian Penyebaran , pilih kotak centang Sebarkan proyek database secara otomatis sebelum pengujian unit dijalankan .

  8. Di Proyek database, klik SimpleUnitTestDB.sqlproj.

  9. Di Konfigurasi penyebaran, klik Debug.

    Anda juga dapat membuat data pengujian sebagai bagian dari pengujian unit SQL Server Anda. Untuk panduan ini, Anda akan melewati langkah itu karena pengujian akan membuat data mereka sendiri.

  10. Klik OK.

    Build proyek pengujian dan Designer Pengujian Unit SQL Server muncul. Selanjutnya, Anda akan memperbarui logika pengujian dalam skrip Transact-SQL dari pengujian unit.

Tentukan Logika Pengujian

Database yang sangat sederhana ini memiliki dua tabel, Pelanggan dan Pesanan. Anda memperbarui database dengan menggunakan prosedur tersimpan berikut ini:

  • uspNewCustomer - Prosedur tersimpan ini menambahkan catatan ke tabel Pelanggan, yang mengatur kolom YTDOrders dan YTDSales pelanggan ke nol.

  • uspPlaceNewOrder - Prosedur tersimpan ini menambahkan rekaman ke tabel Pesanan untuk pelanggan tertentu dan memperbarui nilai YTDOrders pada rekaman terkait dalam tabel Pelanggan.

  • uspFillOrder - Prosedur tersimpan ini memperbarui rekaman dalam tabel Pesanan dengan mengubah status dari 'O' menjadi 'F' dan menaikkan jumlah YTDSales pada rekaman yang sesuai dalam tabel Pelanggan.

  • uspCancelOrder - Prosedur tersimpan ini memperbarui rekaman dalam tabel Pesanan dengan mengubah status dari 'O' menjadi 'X' dan mengurangi jumlah YTDOrders pada rekaman yang sesuai dalam tabel Pelanggan.

  • uspShowOrderDetails - Prosedur tersimpan ini menggabungkan tabel Pesanan dengan tabel Kustom dan memperlihatkan rekaman untuk pelanggan tertentu.

Catatan

Contoh ini menggambarkan cara membuat pengujian unit SQL Server sederhana. Dalam database dunia nyata, Anda dapat menjumlahkan jumlah total semua pesanan dengan status 'O' atau 'F' untuk pelanggan tertentu. Prosedur dalam panduan ini juga tidak berisi penanganan kesalahan. Misalnya, mereka tidak mencegah Anda memanggil uspFillOrder untuk pesanan yang telah diisi.

Pengujian mengasumsikan bahwa database dimulai dalam keadaan bersih. Anda akan membuat pengujian yang memverifikasi kondisi berikut:

  • uspNewCustomer - Verifikasi bahwa tabel Pelanggan berisi satu baris setelah Anda menjalankan prosedur tersimpan.

  • uspPlaceNewOrder - Untuk pelanggan yang memiliki CustomerID 1, lakukan pemesanan seharga $100. Verifikasi bahwa jumlah YTDOrders untuk pelanggan tersebut adalah 100 dan jumlah YTDSales adalah nol.

  • uspFillOrder - Untuk pelanggan yang memiliki CustomerID 1, lakukan pemesanan seharga $50. Isi pesanan itu. Verifikasi bahwa jumlah YTDOrders dan YTDSales keduanya adalah 50.

  • uspShowOrderDetails - Untuk pelanggan yang memiliki CustomerID 1, lakukan pemesanan seharga $100, $50, dan $5. Verifikasi bahwa uspShowOrderDetails mengembalikan jumlah kolom yang tepat dan bahwa kumpulan hasil memiliki checksum yang diharapkan.

Catatan

Untuk serangkaian pengujian unit SQL Server lengkap, Anda biasanya akan memverifikasi bahwa kolom lain diatur dengan benar. Untuk menjaga penelusuran ini pada ukuran yang dapat dikelola, panduan ini tidak menjelaskan cara memverifikasi perilaku uspCancelOrder.

Untuk menulis pengujian unit SQL Server untuk uspNewCustomer

  1. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspNewCustomerTest, dan pastikan Pengujian disorot dalam daftar yang berdekatan.

    Setelah melakukan langkah sebelumnya, Anda dapat membuat skrip pengujian untuk tindakan pengujian dalam pengujian unit.

  2. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    -- ssNoVersion 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. Di panel Kondisi Pengujian , klik kondisi pengujian Inkonklusif, lalu klik ikon Hapus Kondisi Pengujian (X merah).

  4. Di panel Kondisi Pengujian , klik Jumlah Baris dalam daftar, lalu klik ikon Tambahkan Kondisi Pengujian (hijau +).

  5. Buka jendela Properti (pilih kondisi pengujian dan tekan F4), dan atur properti Jumlah Baris ke 1.

  6. Pada menu Berkas, klik Simpan Semua.

    Selanjutnya Anda menentukan logika pengujian unit untuk uspPlaceNewOrder.

Untuk menulis pengujian unit SQL Server untuk uspPlaceNewOrder

  1. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspPlaceNewOrderTest, dan pastikan Pengujian disorot dalam daftar yang berdekatan.

    Setelah melakukan langkah ini, Anda dapat membuat skrip pengujian untuk tindakan pengujian dalam pengujian unit.

  2. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    -- ssNoVersion 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. Di panel Kondisi Pengujian , klik kondisi pengujian Inkonklusif, dan klik Hapus Kondisi Pengujian.

  4. Di panel Kondisi Pengujian , klik Nilai Skalar dalam daftar, lalu klik Tambahkan Kondisi Pengujian.

  5. Di jendela Properti , atur properti Nilai yang Diharapkan ke 100.

  6. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspPlaceNewOrderTest, dan pastikan Pra-Pengujian disorot dalam daftar yang berdekatan.

    Setelah melakukan langkah ini, Anda dapat menentukan pernyataan yang memasukkan data Anda ke dalam status yang diperlukan untuk menjalankan pengujian Anda. Untuk contoh ini, Anda harus membuat catatan Pelanggan sebelum dapat melakukan pemesanan.

  7. Klik Klik di sini untuk membuat untuk membuat skrip pra-pengujian.

  8. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    /*  
    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. Pada menu Berkas, klik Simpan Semua.

    Selanjutnya Anda membuat pengujian unit untuk uspFillOrder.

Untuk menulis pengujian unit SQL Server untuk uspFillOrder

  1. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspFillOrderTest, dan pastikan Pengujian disorot dalam daftar yang berdekatan.

    Setelah melakukan langkah ini, Anda dapat membuat skrip pengujian untuk tindakan pengujian dalam pengujian unit.

  2. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    -- ssNoVersion 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. Di panel Kondisi Pengujian , klik kondisi pengujian Inkonklusif, dan klik Hapus Kondisi Pengujian.

  4. Di panel Kondisi Pengujian , klik Nilai Skalar dalam daftar, lalu klik Tambahkan Kondisi Pengujian.

  5. Di jendela Properti , atur properti Nilai yang Diharapkan ke 100.

  6. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspFillOrderTest, dan pastikan Pra-Pengujian disorot dalam daftar yang berdekatan. Setelah melakukan langkah ini, Anda dapat menentukan pernyataan yang memasukkan data Anda ke dalam status yang diperlukan untuk menjalankan pengujian Anda. Untuk contoh ini, Anda harus membuat catatan Pelanggan sebelum dapat melakukan pemesanan.

  7. Klik Klik di sini untuk membuat untuk membuat skrip pra-pengujian.

  8. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    /*  
    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. Pada menu Berkas, klik Simpan Semua.

Untuk menulis pengujian unit SQL Server untuk uspShowOrderDetails

  1. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspShowOrderDetailsTest, dan pastikan Pengujian disorot dalam daftar yang berdekatan.

    Setelah melakukan langkah ini, Anda dapat membuat skrip pengujian untuk tindakan pengujian dalam pengujian unit.

  2. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    -- ssNoVersion 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. Di panel Kondisi Pengujian , klik kondisi pengujian Inkonklusif, dan klik Hapus Kondisi Pengujian.

  4. Di panel Kondisi Pengujian , klik Skema yang Diharapkan dalam daftar, lalu klik Tambahkan Kondisi Pengujian.

  5. Di jendela Properti , di properti Konfigurasi , klik tombol telusuri ('...').

  6. Dalam kotak dialog Konfigurasi untuk expectedSchemaCondition1 , tentukan koneksi ke database Anda. Misalnya, jika Anda menggunakan lokasi penyebaran default, yaitu LocalDB, Anda akan mengklik Koneksi Baru tentukan (LocalDB)\Projects. Lalu, pilih nama database.

  7. Klik Ambil. (Jika perlu, klik Ambil hingga Anda melihat data.)

    Isi Transact-SQL dari pengujian unit Anda dijalankan, dan skema yang dihasilkan muncul di kotak dialog. Karena kode pra-pengujian tidak dijalankan, tidak ada data yang dikembalikan. Karena Anda hanya memverifikasi skema dan bukan data, ini baik-baik saja.

  8. Klik OK.

    Skema yang diharapkan disimpan dengan kondisi pengujian.

  9. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspShowOrderDetailsTest, dan pastikan bahwa Pra-Pengujian disorot dalam daftar yang berdekatan. Setelah melakukan langkah ini, Anda dapat menentukan pernyataan yang memasukkan data Anda ke dalam status yang diperlukan untuk menjalankan pengujian Anda. Untuk contoh ini, Anda harus membuat catatan Pelanggan sebelum dapat melakukan pemesanan.

  10. Klik Klik di sini untuk membuat untuk membuat skrip pra-pengujian.

  11. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    /*  
    Add Transact-SQL statements here 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. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspShowOrderDetailsTest, dan klik Uji di daftar yang berdekatan.

    Anda harus melakukan ini karena Anda ingin menerapkan kondisi checksum ke pengujian, bukan ke pra-pengujian.

  13. Di panel Kondisi Pengujian , klik Checksum Data dalam daftar, lalu klik Tambahkan Kondisi Pengujian.

  14. Di jendela Properti , di properti Konfigurasi , klik tombol telusuri ('...').

  15. Dalam kotak dialog Konfigurasi untuk checksumCondition1 , tentukan koneksi ke database Anda.

  16. Ganti Transact-SQL dalam kotak dialog (di bawah tombol Edit Koneksi ) dengan kode berikut:

    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  
    
    -- ssNoVersion 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;  
    

    Kode ini menggabungkan kode Transact-SQL dari pra-pengujian dengan Transact-SQL dari pengujian itu sendiri. Anda memerlukan keduanya untuk mengembalikan hasil yang sama dengan yang akan dikembalikan pengujian saat Anda menjalankannya.

  17. Klik Ambil. (Jika perlu, klik Ambil hingga Anda melihat data.)

    Transact-SQL yang Anda tentukan dijalankan, dan checksum dihitung untuk data yang dikembalikan.

  18. Klik OK.

    Checksum terhitung disimpan dengan kondisi pengujian. Checksum yang diharapkan muncul di kolom Nilai dari kondisi pengujian Data Checksum.

  19. Pada menu Berkas, klik Simpan Semua.

    Pada titik ini, Anda siap untuk menjalankan pengujian Anda.

Menjalankan Pengujian Unit SQL Server

Untuk menjalankan pengujian unit SQL Server

  1. Pada menu Uji , arahkan ke Windows, lalu klik Uji Tampilan di Visual Studio 2010 atau Test Explorer di Visual Studio 2012.

  2. Di jendela Tampilan Uji (Visual Studio 2010), klik Refresh pada toolbar untuk memperbarui daftar pengujian. Untuk melihat daftar pengujian di Test Explorer (Visual Studio 2012), buat solusinya.

    Jendela Uji Tampilan atau Penjelajah Uji mencantumkan pengujian yang Anda buat sebelumnya dalam panduan ini dan yang Anda tambahkan pernyataan Transact-SQL dan kondisi pengujian. Pengujian yang bernama TestMethod1 kosong dan tidak digunakan dalam panduan ini.

  3. Klik kanan Sales_uspNewCustomerTest, dan klik Jalankan Pilihan.

    Visual Studio menggunakan konteks istimewa yang Anda tentukan untuk menyambungkan ke database dan menerapkan rencana pembuatan data. Visual Studio kemudian beralih ke konteks eksekusi sebelum menjalankan skrip Transact-SQL dalam pengujian. Terakhir, Visual Studio mengevaluasi hasil skrip Transact-SQL terhadap skrip yang Anda tentukan dalam kondisi pengujian, dan hasil dari lulus atau gagal muncul di jendela Hasil Pengujian .

  4. Lihat hasilnya di jendela Hasil Pengujian .

    Pengujian lolos, yang berarti pernyataan SELECT mengembalikan satu baris saat dijalankan.

  5. Ulangi langkah 3 untuk pengujian Sales_uspPlaceNewOrderTest, Sales_uspFillOrderTest, dan Sales_uspShowOrderDetailsTest. Hasilnya harus sebagai berikut:

    Uji Hasil yang diharapkan
    Sales_uspPlaceNewOrderTest Lulus
    Sales_uspShowOrderDetailsTest Lulus
    Sales_uspFillOrderTest Gagal dengan kesalahan berikut: "Kondisi ScalarValueCondition (scalarValueCondition2) Gagal: ResultSet 1 Baris 1 Kolom 1: nilai tidak cocok, aktual '-100' diharapkan '100'." Kesalahan ini terjadi karena definisi prosedur tersimpan berisi kesalahan kecil.

    Selanjutnya, Anda akan memperbaiki kesalahan dan menjalankan kembali pengujian Anda.

Untuk memperbaiki kesalahan di Sales.uspFillOrder

  1. Di simpul SQL Server Object Explorer Projects untuk database Anda, klik dua kali prosedur tersimpan uspFillOrder untuk membuka definisinya di editor Transact-SQL.

  2. Dalam definisi, temukan pernyataan Transact-SQL berikut:

    UPDATE [Sales].[Customer]  
       SET  
       YTDSales = YTDSales - @Delta  
        WHERE [CustomerID] = @CustomerID  
    
  3. Ubah klausa SET dalam pernyataan agar sesuai dengan pernyataan berikut:

    UPDATE [Sales].[Customer]  
       SET  
       YTDSales = YTDSales + @Delta  
        WHERE [CustomerID] = @CustomerID  
    
  4. Pada menu File , klik Simpan uspFillOrder.sql.

  5. Di Tampilan Uji, klik kanan Sales_uspFillOrderTest, dan klik Jalankan Pilihan.

    Tes lolos.

Menambahkan Pengujian Unit Negatif

Anda dapat membuat pengujian negatif untuk memverifikasi bahwa pengujian gagal ketika seharusnya gagal. Misalnya, jika Anda mencoba membatalkan pesanan yang sudah terisi, pengujian tersebut akan gagal. Di bagian panduan ini, Anda membuat pengujian unit negatif untuk prosedur tersimpan Sales.uspCancelOrder.

Untuk membuat dan memverifikasi pengujian negatif, Anda harus melakukan tugas berikut:

  • Memperbarui prosedur tersimpan untuk menguji kondisi kegagalan

  • Menentukan pengujian unit baru

  • Ubah kode untuk pengujian unit untuk menunjukkan bahwa diharapkan gagal

  • Menjalankan pengujian unit

Untuk memperbarui prosedur tersimpan

  1. Di simpul SQL Server Object Explorer Projects untuk database SimpleUnitTestDB, perluas simpul Programmability, perluas node Prosedur Tersimpan, dan klik dua kali uspCancelOrder.

  2. Di editor Transact-SQL, perbarui definisi prosedur agar sesuai dengan kode berikut:

    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. Pada menu File , klik Simpan uspCancelOrder.sql.

  4. Tekan F5 untuk menyebarkan SimpleUnitTestDB.

    Anda menyebarkan pembaruan ke prosedur tersimpan uspCancelOrder. Anda tidak mengubah objek lain, jadi hanya prosedur tersimpan yang diperbarui.

    Selanjutnya Anda menentukan pengujian unit terkait untuk prosedur ini.

Untuk menulis pengujian unit SQL Server untuk uspCancelOrder

  1. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspCancelOrderTest, dan pastikan Pengujian disorot dalam daftar yang berdekatan.

    Setelah melakukan langkah ini, Anda dapat membuat skrip pengujian untuk tindakan pengujian dalam pengujian unit.

  2. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    -- ssNoVersion 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. Di panel Kondisi Pengujian , klik kondisi pengujian Inkonklusif, dan klik ikon Hapus Kondisi Pengujian .

  4. Di panel Kondisi Pengujian , klik Nilai Skalar dalam daftar, lalu klik ikon Tambahkan Kondisi Pengujian .

  5. Di jendela Properti , atur properti Nilai yang Diharapkan ke 0.

  6. Di bilah navigasi Designer Pengujian Unit SQL Server, klik Sales_uspCancelOrderTest, dan pastikan Pra-Pengujian disorot dalam daftar yang berdekatan. Setelah melakukan langkah ini, Anda dapat menentukan pernyataan yang memasukkan data Anda ke dalam status yang diperlukan untuk menjalankan pengujian Anda. Untuk contoh ini, Anda harus membuat catatan Pelanggan sebelum dapat melakukan pemesanan.

  7. Klik Klik di sini untuk membuat untuk membuat skrip pra-pengujian.

  8. Perbarui pernyataan Transact-SQL di editor Transact-SQL agar sesuai dengan pernyataan berikut:

    /*  
    Add Transact-SQL statements here 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. Pada menu Berkas, klik Simpan Semua.

    Pada titik ini, Anda siap untuk menjalankan pengujian Anda.

Untuk menjalankan pengujian unit SQL Server

  1. Di Tampilan Uji, klik kanan Sales_uspCancelOrderTest, dan klik Jalankan Pilihan.

  2. Lihat hasilnya di jendela Hasil Pengujian .

    Pengujian gagal dan kesalahan berikut muncul:

    Metode pengujian TestProject1.SqlServerUnitTests1.Sales_uspCancelOrderTest melemparkan pengecualian: System.Data.SqlClient.SqlException: Anda hanya dapat membatalkan pesanan terbuka.

    Selanjutnya, Anda memodifikasi kode untuk menunjukkan bahwa pengecualian diharapkan.

Untuk mengubah kode untuk pengujian unit

  1. Di Penjelajah Solusi, perluas TestProject1, klik kanan SqlServerUnitTests1.cs, dan klik Tampilkan Kode.

  2. Di editor kode, navigasikan ke metode Sales_uspCancelOrderTest. Ubah atribut metode agar sesuai dengan kode berikut:

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

    Anda menentukan bahwa Anda berharap untuk melihat pengecualian tertentu. Anda dapat secara opsional menentukan nomor kesalahan tertentu. Jika Anda tidak menambahkan atribut ini, pengujian unit akan gagal, dan pesan muncul di jendela Hasil Pengujian

    Penting

    Saat ini, Visual Studio 2012 tidak mendukung atribut ExpectedSqlException. Untuk informasi untuk mengatasi hal ini, lihat Tidak dapat Menjalankan Pengujian Unit Database "Kegagalan yang Diharapkan".

  3. Pada menu File, klik Simpan SqlServerUnitTests1.cs.

    Selanjutnya, Anda menjalankan kembali pengujian unit untuk memverifikasi bahwa pengujian gagal seperti yang diharapkan.

Untuk menjalankan kembali pengujian unit SQL Server

  1. Di Tampilan Uji, klik kanan Sales_uspCancelOrderTest, dan klik Jalankan Pilihan.

  2. Lihat hasilnya di jendela Hasil Pengujian .

    Tes lolos, yang berarti bahwa prosedur gagal ketika seharusnya gagal.

Langkah berikutnya

Dalam proyek umum, Anda akan menentukan pengujian unit tambahan untuk memverifikasi bahwa semua objek database penting berfungsi dengan benar. Ketika serangkaian pengujian selesai, Anda akan memeriksa pengujian tersebut ke dalam kontrol versi untuk membagikannya dengan tim.

Setelah membuat garis besar, Anda dapat membuat dan memodifikasi objek database lalu membuat pengujian terkait untuk memverifikasi apakah perubahan akan merusak perilaku yang diharapkan.

Lihat juga

Membuat dan Menentukan Pengujian Unit SQL Server
Memverifikasi Kode Database dengan Menggunakan Pengujian Unit SQL Server
Cara: Membuat Uji Unit SQL Server Kosong
Cara: Mengonfigurasi Eksekusi Pengujian Unit SQL Server