1

SQL Server と C# の間で対話するために、SqlCommandオブジェクト、パラメーター、およびストアド プロシージャを使用しています。

私の問題は、それがまだデータベースと同期されているかどうか、実行するまでわからないことです。

たとえば、次のストアド プロシージャがあるとします。

create procedure psSync
(
    @Argument VARCHAR(50)
)
--do stuff

私は自分のコードに持っています:

String myArgument="20131110"
SqlCommand sqlcmd = new SqlCommand { CommandType = CommandType.StoredProcedure, CommandText = "psSync"};
sqlCommand.Parameters.AddWithValue("@Argument", myArgument);
//execute sql command

ここではすべて問題ありません。

しかし、procをに変更している場合

create procedure psSync
(
    --Desync!
    @Argument Datetime
)
--do stuff

そして、myArgument を datetime に変更するのを忘れると、クラッシュしてしまい、このバグに気付くのが遅すぎることがよくあります。

私は最初に単体テストを実行しようとしましたが、トランザクションの開始とロールバックを使用して開発データベースでストアド プロシージャを実行しましたが、次のように好きではありません。

  • 時間がかかる
  • 製品で誤って実行される可能性があります
  • データベース構成をテストdllに保存します

だから私の質問は:

C# コードと SqlServer コード (SqlCommand->ストアド プロシージャ) の間のすべての SQL リンクを迅速、効率的かつ安全にテストするにはどうすればよいでしょうか?

4

2 に答える 2

0

DB、サービスなどの環境との相互作用は、機能および統合テストの作業です。これらのテストは遅く、その量は最小限に抑える必要があります。

単体テストに時間がかかる場合、それは単体テストではありません。単体テストでは、予期されるパラメーターが SqlCommand に設定され、execute メソッドが呼び出されたことを確認できます。DB コンテキストをモックする必要があります。

そのような単体テストの修正は、ストアド プロシージャを更新したその人物の責任です。または、単体テストを同期する必要がある DB 仕様が必要です。

于 2013-10-11T20:02:16.517 に答える