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

第一篇使用tSQLt撰寫Function測試案例,這篇繼續介紹如何使用tSQLt撰寫StoreProcedure測試案例。

這次我將測試一隻執行更新工作職稱的SP,為了每次測試都能取得一致結果,通常我們都會在測試後還原測試資料,

但大團隊環境下,你不能保證每人都是聖人,所以情況常常都是用說的比較簡單~XD,

現在使用tSQLt你可以避免這樣類似的問題,因為測試資料可以合併至測試案例中。

create proc USP_UPJobTitle
(
@BusinessEntityID int
,@JobTitle varchar(50)
)
as
set nocount on
update MyEmployee set JobTitle=@JobTitle
where BusinessEntityID=@BusinessEntityID

透過該SP傳入員工ID和工作職稱後,更新員工的工作職稱。

 

我們希望測試案例,每次在測試和正式環境執行結果都能一致,不用擔心schema、

資料異動或其他同事操作並影響測試案例結果。

由於tSQLt會建立schema結構,所以可有效避免上面問題,現在我們開始來寫測試案例。

if object_id('TesRicoTDD.Test_USP_UPJobTitle', 'P') is not null
drop proc TesRicoTDD.Test_USP_UPJobTitle;
go
 
create proc TesRicoTDD.Test_USP_UPJobTitle
as
begin
  exec tSQLt.FakeTable 'dbo.MyEmployee';  --透過 FakeTable SP建立 temp table模擬正式資料表 MyEmployee
 
  insert into dbo.MyEmployee (BusinessEntityID , JobTitle,BirthDate)
  select 87,'Production Technician - WC40','1965-04-09';  --新增測試資料
 
  exec dbo.USP_UPJobTitle 87, 'superTDD'
 
  declare @newJobTitle varchar(50)
  select @newJobTitle = JobTitle from dbo.MyEmployee where BusinessEntityID = 87; --取得員工87的工作職稱
 
  exec tSQLt.AssertEquals 'superTDD', @newJobTitle; --判斷結果是否如預期=superTDD
end;
go
 
exec tSQLt.Run 'TesRicoTDD.Test_USP_UPJobTitle'; --執行測試

沒有意外測試案例成功,再來看看正式資料表資料是否正常。

 

正式資料表資料果然沒有任何異動。

 

現在我更改錯誤測試案例,並再次執行測試看看結果如何

if object_id('TesRicoTDD.Test_USP_UPJobTitle', 'P') is not null
drop proc TesRicoTDD.Test_USP_UPJobTitle;
go
 
create proc TesRicoTDD.Test_USP_UPJobTitle
as
begin
  exec tSQLt.FakeTable 'dbo.MyEmployee';  --透過 FakeTable SP建立 temp table模擬正式資料表 MyEmployee
 
  insert into dbo.MyEmployee (BusinessEntityID , JobTitle,BirthDate)
  select 87,'Production Technician - WC40','1965-04-09';  --新增測試資料
 
  exec dbo.USP_UPJobTitle 87, 'superTDD'
 
  declare @newJobTitle varchar(50)
  select @newJobTitle = JobTitle from dbo.MyEmployee where BusinessEntityID = 87; --取得員工87的工作職稱
 
  exec tSQLt.AssertEquals '我的愛人何時跟我回家', @newJobTitle; --判斷結果是否如預期=superTDD,這裡我輸入錯誤 我的愛人何時跟我回家
end;
go
 
exec tSQLt.Run 'TesRicoTDD.Test_USP_UPJobTitle'; --執行測試

tSQLt果然告訴你測試結果錯誤。

 

參考

[SQL SERVER]TDD with tSQLt in SQL Server(1)Function