2012-05-09 18 views
0

ユニット データベースと通信する統合テストを書くにはどうすればよいですか?例えば:この場合データベース照会でオブジェクトを統合テストする方法

public int GetAppLockCount(DbConnection connection) 
{ 
    string query := 
      "SELECT"+CRLF+ 
      " tl.resource_type AS ResourceType,"+CRLF+ 
      " tl.resource_description AS ResourceName,"+CRLF+ 
      " tl.request_session_id AS spid"+CRLF+ 
      "FROM sys.dm_tran_locks tl"+CRLF+ 
      "WHERE tl.resource_type = 'APPLICATION'"+CRLF+ 
      "AND tl.resource_database_id = ("+CRLF+ 
      " SELECT dbid"+CRLF+ 
      " FROM master.dbo.sysprocesses"+CRLF+ 
      " WHERE spid = @@spid)"; 

    IRecordset rdr = Connection.Execute(query); 

    int nCount = 0; 
    while not rdr.EOF do 
    { 
     nCount := nCount+1; 
     rdr.Next; 
    } 

    return nCount; 
} 

私はこのバグのコード(IRecordset戻り空のレコード)を追い払うしようとしています。

[UnitTest] 
void TestGetLockCountShouldAlwaysSucceed(); 
{ 
    DbConnection conn = GetConnectionForUnit_IMean_IntegrationTest(); 
    GetAppLockCount(conn); 
    CheckTrue(True, "We should reach here, whether there are app locks or not"); 
} 

は、今私が必要とするすべては ユニット 統合テストを実行するとき にいくつかのデータベースに接続する方法です。

テストランナーが接続文字列をどこかに保存しているのでしょうか? .iniまたは.xmlまたは.configファイルですか?


注:言語/フレームワークに依存しません。その点ホームを駆動するために

  • C#
  • デルファイ
  • ADO.net
  • ADO
  • NUnitの
  • DUnitの

:コードは意図から要素を含みます。

答えて

1

これでユニット統合テストを実行しているときに、データベースに接続する方法が必要です。

既存のデータベースまたはインメモリデータベースを使用してください。私は現在、AntファイルでLiquibaseスクリプトを使ってスプラットして再構築した既存のデータベースを使用しようとしました。 メモリ内のメリット - 他のアプリケーションに依存しません。 短所 - 実際と同じではなく、起動に時間がかかることがあります。 実際のデータベースの利点 - 現実のものと同じになる可能性があります。 短所 - サードパーティのマシンにアクセスする必要があります。新しいユーザーを設定する(新しいデータベースを作成する)

テストランナーが接続文字列をどこかに保存しているのですか? .iniファイルまたは.xmlファイルまたは.configファイル?

Yeap。 C#では、.configファイルをJavaの.propsファイルで使用しました。インメモリを使用すると、これはバージョンコントロールに投げ込むことができます。バージョンコントロールは各ユーザーごとに同じで、実際のデータベースはどこかで動作し、ユーザーごとに異なる必要があります。

また、シードデータも考慮する必要があります。 Javaでは過去にdbUnitを使用しました。最も読みやすいものではありませんが、動作します。今私はRuby ActiveRecordタスクを使用します。

どうやって始めますか?まず、データベースを再構築できますか?この道を遠くに行く前に、これを自動化する必要があります。

次に、テスト用に空のローカルデータベースを構築する必要があります。私は開発者一人一人と行き来し、他のチームは共有しますがコミットしません。 .NET/MS SQLの世界では、メモリ内では非常に簡単だと思います。

関連する問題