0

私はSQL単体テストは初めてですが、最初のテストを作成し、これが賢明なテストであることを確認しようとしています. したがって、単純に更新(存在する場合)または挿入(存在しない場合)を行うストアドプロシージャがあります。TSQLUnit を使用して、以下のテストを作成し、spModifyDataというストアド プロシージャをテストしました。このテストの目的は、既存の ID が渡されたときにデータベースに新しいレコードが作成されないことを確認することです。

ALTER PROCEDURE [dbo].[ut_TestspModifyData] 
AS
BEGIN 
    SET NOCOUNT ON;
     -- Setup the test conditions by inserting test data
     DECLARE 
                @newidone uniqueidentifier,
                @newidtwo uniqueidentifier,
                @newidthree uniqueidentifier,
                @ExpectedID uniqueidentifier,
                @ActualID uniqueidentifier

                SET @ActualID = '13E7C741-9A04-4E84-B604-141874A6A9B4'
                SET @ExpectedID = '13E7C741-9A04-4E84-B604-141874A6A9B4'
                SET @newidone = newID()
                SET @newidtwo = newID()
                SET @newidthree = newID()

                 INSERT INTO DataSource( [DataSourcePrimarySource],[DataSourceName],[DataSourceRecordCreateDate] 
          ,[DataSourceStatus] ,[DataSourceIsActive]) VALUES ('PRIMARY SOURCE ONE', 'XYZ', GETDATE() , @newidone, 1)

  -- Exercise the test
 EXEC  spModifyDataSource @ActualID , 'PRIMARY SOURCE ONETWO', 'BBB', @newIDone, 0  

 -- Assert expectations
 IF (@ExpectedID != @ActualID)
                EXEC dbo.tsu_Failure 'ModifyData failed.' 

-- Teardown
 -- Implicitly done via ROLLBACK TRAN

END
4

1 に答える 1

0

このテストはストアド プロシージャの機能部分をテストしているため、「実用的な」単体テストです。パラメータが有効であることをテストする必要はありません。

そうは言っても、それがあなたがしようとしていることをテストする最良の方法であるかどうかはわかりません。早い段階で設定した変数として使用@ActualIDしているように見えますが、パラメーターとして指定していないOUTPUTため、このテストに合格することを常に期待しています(間違って読んでいるか、テストにバグがあります)。

あなたの質問は、テストの目的は「既存の ID が渡されたときに、データベースに新しいレコードが作成されないことを確認すること」であると述べています。

実際には、このテストの assert セクションへのアプローチは少し異なりDataSourceます。返されたパラメーターをチェックするのではなく、テーブルの結果を直接チェックします。データベースで作成されたものをチェックしているためです。さらに出力パラメーターをチェックしますが、通常は、出力パラメーターをデータ チェックに対する個別のテスト、または少なくとも個別のアサート (つまり、個別のメッセージ) と見なします。

TSQLUnitクックブックの例のように、より説明的なメッセージを使用できると役立つと思います

1 つのことだけをテストするテストを解決する方が簡単だと思います。したがって、何を修正する必要があるかがわかります。多くの場合、記述も簡単です。

それは役に立ちますか?

于 2012-08-29T06:11:14.900 に答える