3

TestInitializeVisual Studio で単体 (またはこの場合は統合) テストを実行するときに、データベース プロジェクト (同じソリューション内) をメソッドの一部として公開する方法はありますか?

実際にデータベースにヒットする各統合テストは、既知の正常でクリーンなデータベースにヒットする必要があり、そのための最善の方法は、各テストでデータベースを完全に更新することです。私はオンラインで調べて、データベースとテストに関する多くの関連情報を見つけましたが、自動テストを実行するときにデータベースを更新することについては何も知りませんでした. また、Visual Studio インターフェイスで何も見つからないか、少なくとも不足しています。

Visual Studio Ultimate 2012 RC を使用しています。

4

3 に答える 3

3

同僚からの役立つリンクをたどって、展開のためProcess.Startに実行するために使用することになりました。sqlpackage.exeVisual Studio の観点からは期待したほどきれいではありませんが、仕事は完了しています。私のブートストラップは次のようになります。

private const string SQL_PUBLISH_COMMAND = @"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe";
private const string SQL_PUBLISH_COMMAND_ARGUMENTS = @"/Action:Publish /SourceFile:C:\Data\Code\NewEdCo\Domain\NewEdCo.Database.SQLExpress\bin\Debug\NewEdCo.Database.SQLExpress.dacpac /Properties:CreateNewDatabase=True /TargetServerName:hactar\sqlexpress2012 /TargetDatabaseName:NewEdCoTest";


private void DeployTestDatabase()
{
    var procInfo = new ProcessStartInfo
    {
        Arguments = SQL_PUBLISH_COMMAND_ARGUMENTS,
        CreateNoWindow = true,
        ErrorDialog = false,
        FileName = SQL_PUBLISH_COMMAND,
        RedirectStandardOutput = true,
        UseShellExecute = false
    };
    var proc = new Process
    {
        StartInfo = procInfo
    };

    proc.Start();
    var result = proc.StandardOutput.ReadToEnd();
}

[TestInitialize]
public void BootstrapTests()
{
    DeployTestDatabase();
}

[TestCleanup]
public void TearDownTests()
{
    DeployTestDatabase();
}

標準出力の読み取りに使用されるオプションProcessStartInfo(まだ何もしていませんが) は、タスクの同期を維持するためにあります。そうすれば、テストは互いに踏みにじられません。これにより、統合テストの実行時間が長くなりますが、私のニーズには問題ありません。

前後とも完全リフレッシュしているのが分かります。検査数が増えて長くなりすぎたら、考え直します。しかし、今のところ、テスト前にリフレッシュし、テスト後に痕跡を残さないようにしたいと考えています。

MSDN には、 のオプションの広範なリストがありますsqlpackage.exe

于 2012-06-07T14:02:34.257 に答える
0

同じ問題に直面して、DACSmash NuGet パッケージは、プロジェクト サイトの例から簡単に作業できることがわかりました。

于 2015-03-03T23:26:35.090 に答える