SlideShare uma empresa Scribd logo
1 de 9
SQL Server 単体テスト
フレームワーク tSQLt
の紹介。
@KatsuYuzu lightning talk宜しくお願い致します。 #clrh78
自己紹介
 Twitter:@KatsuYuzu
 Hatena:http://katsuyuzu.hatenablog.jp/
 仕事:札幌のSIerで3人体制の研究職チーム。
    RIAやスマートフォンアプリなど。
 開発:VB.NET、C#、Silverlight
 趣味:
    ゆず
        ゆずが好きと言ってくれる人は多いけど、ゆずっ子は中々居ない。
    ゲーム
        ポケモン, ファイアーエムブレム, ヴァルキリープロファイル,
         FFCC
    ウルティマオンライン
        9年くらい?プレイ時間は概算でも1万時間を余裕で超えた。1万5
         千も超えてそう。メンテタイムからメンテタイムまで1日20数時
         間プレイしていたことも(白目
tSQLtとは
 tSQLt とは SQL Serverにおける単体テスト用のオープン
  ソースフレームワーク。
 実体はSQL CLR。
 開発者はストアドプロシージャでテストコードを記述する。
 テーブルの差し替えと戻しをサポートしてるので、テスト
  データの投入もストアドでごりごり。
ALTER PROCEDURE
  AcceleratorTests.[test ready for experimentation if 2 particles]
AS
BEGIN
  --Assemble: Fake the Particle table to make sure
  --          it is empty and has no constraints
  EXEC tSQLt.FakeTable 'Accelerator.Particle';
  INSERT INTO Accelerator.Particle (Id) VALUES (1);
  INSERT INTO Accelerator.Particle (Id) VALUES (2);

  DECLARE @Ready BIT;

  --Act: Call the IsExperimentReady function
  SELECT @Ready = Accelerator.IsExperimentReady();

  --Assert: Check that 1 is returned from IsExperimentReady
  EXEC tSQLt.AssertEquals 1, @Ready;

END;
tSQLtとは
 tSQLt とは SQL Serverにおける単体テスト用のオープン
  ソースフレームワーク。
 実体はSQL CLR。
 開発者はストアドプロシージャでテストコードを記述する。
 テーブルの差し替えと戻しをサポートしてるので、テスト
  データの投入もストアドでごりごり。
 結果はメッセージとして出力される。
[AcceleratorTests].[test ready for experimentation if 2 particles] failed: Expected: <1> but was: <0>

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

|No|Test Case Name                                                                                            |Result |
+--+----------------------------------------------------------------------------------------------------------+-------+
|1 |[AcceleratorTests].[test a particle is included only if it fits inside the boundaries of the rectangle]   |Success|
|2 |[AcceleratorTests].[test a particle within the rectangle is returned with an Id, Point Location and Value]|Success|
|3 |[AcceleratorTests].[test a particle within the rectangle is returned]                                     |Success|
|4 |[AcceleratorTests].[test email is not sent if we detected something other than higgs-boson]               |Success|
|5 |[AcceleratorTests].[test email is sent if we detected a higgs-boson]                                      |Success|
|6 |[AcceleratorTests].[test foreign key is not violated if Particle color is in Color table]                 |Success|
|7 |[AcceleratorTests].[test foreign key violated if Particle color is not in Color table]                    |Success|
|8 |[AcceleratorTests].[test no particles are in a rectangle when there are no particles in the table]        |Success|
|9 |[AcceleratorTests].[test status message includes the number of particles]                                 |Success|
|10|[AcceleratorTests].[test we are not ready for experimentation if there is only 1 particle]                |Success|
|11|[AcceleratorTests].[test ready for experimentation if 2 particles]                                        |Failure|
-------------------------------------------------------------------------------
Msg 50000, Level 16, State 10, Line 1
Test Case Summary: 11 test case(s) executed, 10 succeeded, 1 failed, 0 errored.
-------------------------------------------------------------------------------
tSQLtとは
 tSQLt とは SQL Serverにおける単体テスト用のオープン
  ソースフレームワーク。
 実体はSQL CLR。
 開発者はストアドプロシージャでテストコードを記述する。
 テーブルの差し替えと戻しをサポートしてるので、テスト
  データの投入もストアドでごりごり。
 結果はメッセージとして出力される。
 テーブルの比較もできる。
EXEC tSQLt.AssertEqualsTable 'expected', 'actual';


failed: unexpected/missing resultset rows!
|_m_|col1|col2|col3|
+---+----+----+----+
|< |2    |B   |b   |
|< |3    |C   |c   |
|= |1    |A   |a   |
|> |3    |X   |c   |
tSQLtとは
 tSQLt とは SQL Serverにおける単体テスト用のオープン
  ソースフレームワーク。
 実体はSQL CLR。
 開発者はストアドプロシージャでテストコードを記述する。
 テーブルの差し替えと戻しをサポートしてるので、テスト
  データの投入もストアドでごりごり。
 結果はメッセージとして出力される。
 テーブルの比較もできる。
 ストアドの肯定派・否定派の存在は宗教戦争になるので今
  は忘れましょう!
メリット、デメリット
 メリット
   DBファイルのコピーを行わず出来るので、テスト記述→テス
    ト実行のサイクルを短く出来る。
   MSTestとの連携も可能(ライブラリ作ってみた)
     出力をXMLにカスタマイズ可能。
     テストストアドを.NETから呼び出す。
     パースしてLINQで処理って解析。
     MSTestでアサート。
          連携によって更に手軽。継続的インテグレーションにも使える。
メリット、デメリット
 メリット
   DBファイルのコピーを行わず出来るので、テスト記述→テス
    ト実行のサイクルを短く出来る。
   MSTestとの連携も可能(ライブラリ作ってみた)
     出力をXMLにカスタマイズ可能。
     テストストアドを.NETから呼び出す。
     パースしてLINQで処理って解析。
     MSTestでアサート。
          連携によって更に手軽。継続的インテグレーションにも使える。

 デメリット
   SQL書きたくないよ?
まとめ
 tSQLt とは SQL Serverにおける単体テスト用のオープン
  ソースフレームワーク。
 ストアドプロシージャでテストコードを記述する。
 テーブルの差し替え、比較も可能。
 XML出力によってMSTestとも連携できる。


 Quick Start
    http://tsqlt.org/user-guide/quick-start/
    tSQLt自体がシンプルで、Webサイトのガイドもわかりやすい
     ので、SQL Serverの環境があれば10分程度で何となく色々わ
     かります。

Mais conteúdo relacionado

Semelhante a SQL Server 単体テストフレームワーク tSQLt の紹介 #clrh78

世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extensionToshi Harada
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extensionToshi Harada
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jpyoyamasaki
 
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-歩 柴田
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -歩 柴田
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparsenessybenjo
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyoyoyamasaki
 
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 152016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15歩 柴田
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQLyoku0825
 
PostgreSQL13を検証してみた
PostgreSQL13を検証してみたPostgreSQL13を検証してみた
PostgreSQL13を検証してみたNaoya Takeuchi
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Noriyoshi Shinoda
 
実行統計による実践的SQLチューニング
実行統計による実践的SQLチューニング実行統計による実践的SQLチューニング
実行統計による実践的SQLチューニング健一 三原
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121Kosuke Kida
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫Insight Technology, Inc.
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能Shigetaka Yachi
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)Takuya Tsuchida
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 

Semelhante a SQL Server 単体テストフレームワーク tSQLt の紹介 #clrh78 (20)

世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20160929 inno db_fts_jp
20160929 inno db_fts_jp20160929 inno db_fts_jp
20160929 inno db_fts_jp
 
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
 
Rubykansai 81
Rubykansai 81Rubykansai 81
Rubykansai 81
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
 
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
 
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 152016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
PostgreSQL13を検証してみた
PostgreSQL13を検証してみたPostgreSQL13を検証してみた
PostgreSQL13を検証してみた
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)
 
実行統計による実践的SQLチューニング
実行統計による実践的SQLチューニング実行統計による実践的SQLチューニング
実行統計による実践的SQLチューニング
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 

Mais de Katsuya Shimizu

20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazugKatsuya Shimizu
 
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazugKatsuya Shimizu
 
ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99Katsuya Shimizu
 
.NETで始めるプログラミング
.NETで始めるプログラミング.NETで始めるプログラミング
.NETで始めるプログラミングKatsuya Shimizu
 
Azureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jp
Azureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jpAzureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jp
Azureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jpKatsuya Shimizu
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppKatsuya Shimizu
 
XAMLで作るWindows ストアアプリ #CLRH89
XAMLで作るWindows ストアアプリ #CLRH89XAMLで作るWindows ストアアプリ #CLRH89
XAMLで作るWindows ストアアプリ #CLRH89Katsuya Shimizu
 

Mais de Katsuya Shimizu (7)

20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
20181201 Azure Storage 静的 Web サイト ホスティング #きたあず #jazug
 
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
20180616 業務システムをAppServiceで運用しよう #きたあず #jazug
 
ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99
 
.NETで始めるプログラミング
.NETで始めるプログラミング.NETで始めるプログラミング
.NETで始めるプログラミング
 
Azureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jp
Azureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jpAzureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jp
Azureからアプリに通知してみよう #jazug #win8dev_jp #wpdev_jp
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
 
XAMLで作るWindows ストアアプリ #CLRH89
XAMLで作るWindows ストアアプリ #CLRH89XAMLで作るWindows ストアアプリ #CLRH89
XAMLで作るWindows ストアアプリ #CLRH89
 

Último

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Último (8)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

SQL Server 単体テストフレームワーク tSQLt の紹介 #clrh78

  • 1. SQL Server 単体テスト フレームワーク tSQLt の紹介。 @KatsuYuzu lightning talk宜しくお願い致します。 #clrh78
  • 2. 自己紹介  Twitter:@KatsuYuzu  Hatena:http://katsuyuzu.hatenablog.jp/  仕事:札幌のSIerで3人体制の研究職チーム。  RIAやスマートフォンアプリなど。  開発:VB.NET、C#、Silverlight  趣味:  ゆず  ゆずが好きと言ってくれる人は多いけど、ゆずっ子は中々居ない。  ゲーム  ポケモン, ファイアーエムブレム, ヴァルキリープロファイル, FFCC  ウルティマオンライン  9年くらい?プレイ時間は概算でも1万時間を余裕で超えた。1万5 千も超えてそう。メンテタイムからメンテタイムまで1日20数時 間プレイしていたことも(白目
  • 3. tSQLtとは  tSQLt とは SQL Serverにおける単体テスト用のオープン ソースフレームワーク。  実体はSQL CLR。  開発者はストアドプロシージャでテストコードを記述する。  テーブルの差し替えと戻しをサポートしてるので、テスト データの投入もストアドでごりごり。 ALTER PROCEDURE AcceleratorTests.[test ready for experimentation if 2 particles] AS BEGIN --Assemble: Fake the Particle table to make sure -- it is empty and has no constraints EXEC tSQLt.FakeTable 'Accelerator.Particle'; INSERT INTO Accelerator.Particle (Id) VALUES (1); INSERT INTO Accelerator.Particle (Id) VALUES (2); DECLARE @Ready BIT; --Act: Call the IsExperimentReady function SELECT @Ready = Accelerator.IsExperimentReady(); --Assert: Check that 1 is returned from IsExperimentReady EXEC tSQLt.AssertEquals 1, @Ready; END;
  • 4. tSQLtとは  tSQLt とは SQL Serverにおける単体テスト用のオープン ソースフレームワーク。  実体はSQL CLR。  開発者はストアドプロシージャでテストコードを記述する。  テーブルの差し替えと戻しをサポートしてるので、テスト データの投入もストアドでごりごり。  結果はメッセージとして出力される。 [AcceleratorTests].[test ready for experimentation if 2 particles] failed: Expected: <1> but was: <0> +----------------------+ |Test Execution Summary| +----------------------+ |No|Test Case Name |Result | +--+----------------------------------------------------------------------------------------------------------+-------+ |1 |[AcceleratorTests].[test a particle is included only if it fits inside the boundaries of the rectangle] |Success| |2 |[AcceleratorTests].[test a particle within the rectangle is returned with an Id, Point Location and Value]|Success| |3 |[AcceleratorTests].[test a particle within the rectangle is returned] |Success| |4 |[AcceleratorTests].[test email is not sent if we detected something other than higgs-boson] |Success| |5 |[AcceleratorTests].[test email is sent if we detected a higgs-boson] |Success| |6 |[AcceleratorTests].[test foreign key is not violated if Particle color is in Color table] |Success| |7 |[AcceleratorTests].[test foreign key violated if Particle color is not in Color table] |Success| |8 |[AcceleratorTests].[test no particles are in a rectangle when there are no particles in the table] |Success| |9 |[AcceleratorTests].[test status message includes the number of particles] |Success| |10|[AcceleratorTests].[test we are not ready for experimentation if there is only 1 particle] |Success| |11|[AcceleratorTests].[test ready for experimentation if 2 particles] |Failure| ------------------------------------------------------------------------------- Msg 50000, Level 16, State 10, Line 1 Test Case Summary: 11 test case(s) executed, 10 succeeded, 1 failed, 0 errored. -------------------------------------------------------------------------------
  • 5. tSQLtとは  tSQLt とは SQL Serverにおける単体テスト用のオープン ソースフレームワーク。  実体はSQL CLR。  開発者はストアドプロシージャでテストコードを記述する。  テーブルの差し替えと戻しをサポートしてるので、テスト データの投入もストアドでごりごり。  結果はメッセージとして出力される。  テーブルの比較もできる。 EXEC tSQLt.AssertEqualsTable 'expected', 'actual'; failed: unexpected/missing resultset rows! |_m_|col1|col2|col3| +---+----+----+----+ |< |2 |B |b | |< |3 |C |c | |= |1 |A |a | |> |3 |X |c |
  • 6. tSQLtとは  tSQLt とは SQL Serverにおける単体テスト用のオープン ソースフレームワーク。  実体はSQL CLR。  開発者はストアドプロシージャでテストコードを記述する。  テーブルの差し替えと戻しをサポートしてるので、テスト データの投入もストアドでごりごり。  結果はメッセージとして出力される。  テーブルの比較もできる。  ストアドの肯定派・否定派の存在は宗教戦争になるので今 は忘れましょう!
  • 7. メリット、デメリット  メリット  DBファイルのコピーを行わず出来るので、テスト記述→テス ト実行のサイクルを短く出来る。  MSTestとの連携も可能(ライブラリ作ってみた)  出力をXMLにカスタマイズ可能。  テストストアドを.NETから呼び出す。  パースしてLINQで処理って解析。  MSTestでアサート。  連携によって更に手軽。継続的インテグレーションにも使える。
  • 8. メリット、デメリット  メリット  DBファイルのコピーを行わず出来るので、テスト記述→テス ト実行のサイクルを短く出来る。  MSTestとの連携も可能(ライブラリ作ってみた)  出力をXMLにカスタマイズ可能。  テストストアドを.NETから呼び出す。  パースしてLINQで処理って解析。  MSTestでアサート。  連携によって更に手軽。継続的インテグレーションにも使える。  デメリット  SQL書きたくないよ?
  • 9. まとめ  tSQLt とは SQL Serverにおける単体テスト用のオープン ソースフレームワーク。  ストアドプロシージャでテストコードを記述する。  テーブルの差し替え、比較も可能。  XML出力によってMSTestとも連携できる。  Quick Start  http://tsqlt.org/user-guide/quick-start/  tSQLt自体がシンプルで、Webサイトのガイドもわかりやすい ので、SQL Serverの環境があれば10分程度で何となく色々わ かります。