概要
前回の続きです。
https://qiita.com/RYA234/items/1236a6b31b87d71684ea
今回はプロダクトコードのプロシージャをテストする方法を投稿します。
対象読者
・tSQLtのテストコードからプロダクトコードのストアド・プロシージャを呼んでテストしたい
・プロダクトコードとテストコードのプロシージャの配置場所を分離したい方
配置図
コード
プロダクトコード
/usr/src/docker/src/main/sample/input_output.sql
-- Create Date: 2020-12-22 16:00:00
-- 第一引数の入力値を第二引数の出力値に設定するストアド
-- ストアドに追加する方法
-- /opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -i /usr/src/docker/src/main/sample/input_output.sql
-- ↓↓テストの実行コマンド
-- /opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -Q "USE [tSQLt_Example] EXEC tSQLt.Run 'testApp'"
--
USE [main]
GO
CREATE OR ALTER PROCEDURE dbo.input_pass_output
@inputValue int,
@outputValue int OUTPUT
AS
BEGIN
SET @outputValue = @inputValue;
END
GO
テストコード
/usr/src/docker/src/test/sample/test_input_output.sql
-- Create Date: 2020-12-22 16:00:00
-- 別データベース名のプロダクトコードを呼んでテストするためのスクリプト
-- ストアドに追加する方法
-- /opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -i /usr/src/docker/src/test/sample/test_input_output.sql
-- ↓↓テストの実行コマンド
-- /opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -Q "USE [tSQLt_Example] EXEC tSQLt.Run 'testApp'"
-- ;
USE [tSQLt_Example]
GO
CREATE OR ALTER PROCEDURE testApp.[test_input_output_success]
AS
BEGIN
DECLARE @expected int; SET @expected =1;
DECLARE @actual int;
EXEC productg.dbo.[input_pass_output]
@inputValue = 1,
@outputValue = @actual OUTPUT
EXEC tSQLt_Example.tSQLt.AssertEquals @expected, @actual;
END
GO
USE [tSQLt_Example]
GO
CREATE OR ALTER PROCEDURE testApp.[test_input_output_failure]
AS
BEGIN
DECLARE @expected int; SET @expected =0;
DECLARE @actual int;
EXEC productg.dbo.[input_pass_output]
@inputValue = 1,
@outputValue = @actual OUTPUT
EXEC tSQLt_Example.tSQLt.AssertNotEquals @expected, @actual;
END
GO
実行方法
docker コンテナの中で実行する方法を書きます。
ストアドの登録
# product code
/opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -i /usr/src/docker/src/main/sample/input_output.sql
# test code
/opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -i /usr/src/docker/src/test/sample/test_input_output.sql
テストコードの実行と結果
/opt/mssql-tools18/bin/sqlcmd -U sa -P user@12345 -C -Q "USE [tSQLt_Example] EXEC tSQLt.Run 'testApp'"
+----------------------+
|Test Execution Summary|
+----------------------+
|No|Test Case Name |Dur(ms)|Result |
+--+-------------------------------------+-------+-------+
|1 |[testApp].[test_give_test] | 17|Success|
|2 |[testApp].[test_input_output_failure]| 34|Success|
|3 |[testApp].[test_input_output_success]| 17|Success|
----------------------------------------------------------------------------------------
Test Case Summary: 3 test case(s) executed, 3 succeeded, 0 skipped, 0 failed, 0 errored.
----------------------------------------------------------------------------------------
MSSMSから見たストアドの状態
データベース名でプロダクトコードとテストコードを分けられていることを確認できます。
参考
tSQLt 公式
https://tsqlt.org/
github 差分