1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tSQLtでプロダクトコードをテストする

Last updated at Posted at 2025-01-25

概要

前回の続きです。
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から見たストアドの状態

データベース名でプロダクトコードとテストコードを分けられていることを確認できます。

image.png

参考 

tSQLt 公式
https://tsqlt.org/
github 差分

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?