[SQL SERVER]TDD with tSQLt in SQL Server(2-1)StoreProcedure

第二篇使用tSQLt撰寫SP測試案例,這篇繼續介紹如何使用tSQLt撰寫SP另一種測試案例。

該SP會更新資料表UnitPrice全部資料,這次我們將寫資料表差異比對的測試案例。

create proc USP_UPUnitPrice
(
@Discount smallint
)
as
set nocount on
update SalesOrderDetail set UnitPrice=UnitPrice*(@Discount*.1)

撰寫測試案例

if object_id('TesRicoTDD.Test_USP_UPUnitPrice', 'P') is not null
drop proc TesRicoTDD.Test_USP_UPUnitPrice;
go
 
create proc TesRicoTDD.Test_USP_UPUnitPrice
as
begin
 set nocount on
 exec tSQLt.FakeTable 'dbo.SalesOrderDetail'; --透過 FakeTable SP建立 temp table模擬正式資料表 SalesOrderDetail
 
  insert into dbo.SalesOrderDetail (UnitPrice) values (10);
  insert into dbo.SalesOrderDetail (UnitPrice) values (30);
  insert into dbo.SalesOrderDetail (UnitPrice) values (50);
  insert into dbo.SalesOrderDetail (UnitPrice) values (80);
 
  exec dbo.USP_UPUnitPrice 100; --傳入100,表示該欄位都要*10
 
  select UnitPrice into #ActualValues from dbo.SalesOrderDetail;
 
  create table #ExpectedValues (UnitPrice smallint); --建立預期計算後資料表
 
  insert into #ExpectedValues (UnitPrice) values (100);--預期內容
  insert into #ExpectedValues (UnitPrice) values (300);
  insert into #ExpectedValues (UnitPrice) values (500);
  insert into #ExpectedValues (UnitPrice) values (800);
  
  exec tSQLt.AssertEqualsTable #ActualValues, #ExpectedValues; --透過AssertEqualsTable 比較兩個資料表差異資料
end;
go
 
exec tSQLt.Run 'TesRicoTDD.Test_USP_UPUnitPrice';--執行測試

由於兩個資料表每筆資料比對都沒問題,所以測試案例沒意外顯示成功。

 

現在我更改錯誤測試案例(輸入2筆錯誤資料),並再次執行測試看看結果如何

if object_id('TesRicoTDD.Test_USP_UPUnitPrice', 'P') is not null
drop proc TesRicoTDD.Test_USP_UPUnitPrice;
go
 
create proc TesRicoTDD.Test_USP_UPUnitPrice
as
begin
 set nocount on
 exec tSQLt.FakeTable 'dbo.SalesOrderDetail'; --透過 FakeTable SP建立 temp table模擬正式資料表 SalesOrderDetail
 
  insert into dbo.SalesOrderDetail (UnitPrice) values (10);
  insert into dbo.SalesOrderDetail (UnitPrice) values (30);
  insert into dbo.SalesOrderDetail (UnitPrice) values (50);
  insert into dbo.SalesOrderDetail (UnitPrice) values (80);
 
  exec dbo.USP_UPUnitPrice 100; --傳入100,表示該欄位都要*10
 
  select UnitPrice into #ActualValues from dbo.SalesOrderDetail;
 
  create table #ExpectedValues (UnitPrice smallint); --建立預期計算後資料表
 
  insert into #ExpectedValues (UnitPrice) values (110);--錯誤
  insert into #ExpectedValues (UnitPrice) values (300);
  insert into #ExpectedValues (UnitPrice) values (440);--錯誤
  insert into #ExpectedValues (UnitPrice) values (800);
  
  exec tSQLt.AssertEqualsTable #ActualValues, #ExpectedValues; --透過AssertEqualsTable 比較兩個資料表差異資料
end;
go
 
exec tSQLt.Run 'TesRicoTDD.Test_USP_UPUnitPrice';--執行測試

測試案例果然顯示2筆錯誤。

參考

[SQL SERVER]TDD with tSQLt in SQL Server(2)StoreProcedure