同僚からの役立つリンクをたどって、展開のためProcess.Start
に実行するために使用することになりました。sqlpackage.exe
Visual 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
。