2014年11月6日木曜日

SQL Server Unitテストフレームワーク tSQLt 【環境構築】

tSQLtはSQL Serverの単体テスト(Unit Test)を実施するための、オープンソーステストフレームワークです。

環境構築は簡単で以下のURLから資源をダウンロードして以下のスクリプトを実行するだけです。

--環境構築
SetClrEnabled.sql
開いているDBのTRUSTWORTHYオプションをONにする。
これによりCLRの実行が許可される。
テストするDB毎に実行する。

Example.sql
サンプルDB(tSQLt_Example)、tSQLt、テストケースが復元される。
tSQLt.RunAllと実行するだけで、サンプルテストケースを実行可能

tSQLt.class.sql
tSQLt本体、テストを実行する場合は、「SetClrEnabled.sql」とこのスクリプトを実行する。




--tSQLt.Run で実行できる最小単位の名前(スキーマ)を定義
-- 日本語名も指定可能だが全角文字は結果表示がずれる。
EXEC tSQLt.NewTestClass 'testGroup1';
GO

----テストデータ作成
CREATE TABLE NumTable (Num int PRIMARY KEY, str varchar(100))
INSERT INTO NumTable VALUES(1,'一')
INSERT INTO NumTable VALUES(2,'二')
INSERT INTO NumTable VALUES(3,'三')

CREATE TABLE TestTable (Id int, Num int NOT NULL,PRIMARY KEY(Id),FOREIGN KEY (Num) REFERENCES NumTable (Num))
INSERT INTO TestTable VALUES(10,3)
INSERT INTO TestTable VALUES(20,2)
INSERT INTO TestTable VALUES(30,1)
GO


--テスト対象のストアドプロシージャ1
CREATE PROCEDURE TargetProcedure
 @maxId INT OUTPUT,
 @dummy varchar(100) = NULL
AS
BEGIN
 SELECT @maxId = MAX(Id) FROM TestTable
 INSERT INTO NumTable VALUES(@maxId+100,'TargetProcedureで追加') -- テーブルにデータ追加
 INSERT INTO TestTable VALUES(@maxId+10, @maxId+100) -- テーブルにデータ追加
END
GO

--テスト対象のストアドプロシージャ2
CREATE PROCEDURE TargetProcedure2
AS
BEGIN
 DECLARE @Id int
 EXEC dbo.TargetProcedure @Id OUTPUT,'TargetProcedure2内で実行'
 SELECT 'abc',@Id
 RETURN
END
GO


サンプルテストはこちらに記載しています。
  1 期待値との単純比較
  2 FakeTableの使用例
  3 テーブル型の比較例
  4 ストアドプロシージャ内のストアドプロシージャへの引数確認
  5 ストアドプロシージャ内のストアドプロシージャのOUTPUTパラメータの書き換え
  6 ストアドプロシージャ内のストアドプロシージャを書き換える。

tSQLt
http://tsqlt.org/user-guide/quick-start/

日本語解説
http://www.infoq.com/jp/news/2012/02/tSQLt

0 件のコメント:

コメントを投稿