第二篇使用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筆錯誤。
參考