BT

tSQLtを使ってSQL Serverユニットテスト

| 作者: Jenni Konrad フォローする 0 人のフォロワー , 翻訳者 編集部N フォローする 0 人のフォロワー 投稿日 2012年2月16日. 推定読書時間: 5 分 |

原文(投稿日:2012/02/10)へのリンク

tSQLt は SQL Serverにおける、ユニットテスト用の無料のオープンソースフレームワークである。 tSQLtテストケースを書くことによって、開発者は稼動しているデータに基づいた嘘のテーブルやビューを作成でき、テストで期待値と実際の結果を比較できる。テストはT-SQLで書かれので、 SQL Server Management Studioで直接作ることができる。

tSQLtを使うことによって、開発者はデータをテストケース自身によって作成できる。なので稼働中のデータベースのコピーや別にメンテされているテストデータベースに対してテストする必要はない。全てのテストはトランザクション内で走るので、クリーナップワークを減らすのに役立つ。 tSQLtテストは、テストクラスと呼ばれる、データベーススキーマで論理的なグループに分けることができる。

フレームワークをインストールするのは簡単である。 tSQLtをダウンロードしたら、ユーザーはデータベース上でCLRを有効にする必要がある。

EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;

tSQLtフォルダから Example.sqlスクリプトを走らせると、デモデータベースが作られる。(tSQLt を他のデータベースにインストールするには、 ALTER DATABASEを SET TRUSTWORTHY ONで走らせる)。

次に複数のテストケースを持つテストクラスをセットアップする。これによって新しいスキーマが作られる。

EXEC tSQLt.NewTestClass 'AcceleratorTests';
GO

それが終わると、テストケースを作ることができる。以下が例である。全てのテストケースの名前は、'test'で始まり、 SQL Serverストアドプロシージャの命名コンベンションに従わなければならない。これ例は、テストテーブルを作成し、値を挿入し、関数 GetStatusMessageを呼ぶ。 tSQLt 関数AssertEqualsは、期待値と実際の結果をチェックし、一致すればテストは成功する。

CREATE PROCEDURE [AcceleratorTests].[test status message includes the number of particles]
AS
BEGIN
  --Assemble:嘘の Particleテーブルを作って、それが空で、制約が問題ないことを確認する。
  EXEC tSQLt.FakeTable 'Accelerator.Particle';
  --          Put 3 test particles into the table
  INSERT INTO Accelerator.Particle (Id) VALUES (1);
  INSERT INTO Accelerator.Particle (Id) VALUES (2);
  INSERT INTO Accelerator.Particle (Id) VALUES (3);
  --Act: GetStatusMessageFunctionを呼ぶ
  DECLARE @StatusMessage NVARCHAR(MAX);
  SELECT @StatusMessage = Accelerator.GetStatusMessage();

  --Assert:ステータスメッセージが正しいか確認t
  EXEC tSQLt.AssertEqualsString 'The Accelerator is prepared with 3 particles.', @StatusMessage;
END;

テストケースが走ると、結果はテキストで表示される(オプションでXMLフォーマットの出力)。

+----------------------+
|Test Execution Summary|
+----------------------+

|No|Test Case Name                                                          |Result 
+--+------------------------------------------------------------------------+-------+
|1|[AcceleratorTests].[test status message includes the number of particles]|Success|
-------------------------------------------------------------------------------
Msg 50000, Level 16, State 10, Line 1
Test Case Summary: 1 test case(s) executed, 1 succeeded, 0 failed, 0 errored.
-------------------------------------------------------------------------------

テストクラス内で、いくつかのテストケースが一旦作られると、 EXEC tSQLt.RunAllを使ってバッチとして走らせることもできる。 tSQLtを始めるための更なる情報は、 tSQLt Tutorialにある。

SQLユニットテストを継続的ビルドプロセスの一部にしたいと思う人は、tSQLtを Cruise Controlに統合できる。InfoQで以前報告したように、SQL Testと呼ばれる tSQLtのビジュアルインターフェース版もある。tSQLt はSQL Server 2005 SP2 以上と互換である。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT