Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 作为TestInitialize的一部分发布数据库项目_Visual Studio_Unit Testing_Visual Studio 2012 - Fatal编程技术网

Visual studio 作为TestInitialize的一部分发布数据库项目

Visual studio 作为TestInitialize的一部分发布数据库项目,visual-studio,unit-testing,visual-studio-2012,Visual Studio,Unit Testing,Visual Studio 2012,在Visual Studio中运行单元(或本例中的集成)测试时,是否有方法将数据库项目(在同一解决方案中)发布为TestInitialize方法的一部分 其思想是,每个实际命中数据库的集成测试都应该命中一个已知良好且干净的数据库,最好的方法是使用每个测试完全刷新数据库。我一直在网上搜索,找到了很多关于数据库和测试的相关信息,但没有找到运行自动测试时刷新数据库的相关信息。我也没有在VisualStudio界面中找到任何东西,或者至少我没有找到它 我正在使用Visual Studio Ultimat

在Visual Studio中运行单元(或本例中的集成)测试时,是否有方法将数据库项目(在同一解决方案中)发布为
TestInitialize
方法的一部分

其思想是,每个实际命中数据库的集成测试都应该命中一个已知良好且干净的数据库,最好的方法是使用每个测试完全刷新数据库。我一直在网上搜索,找到了很多关于数据库和测试的相关信息,但没有找到运行自动测试时刷新数据库的相关信息。我也没有在VisualStudio界面中找到任何东西,或者至少我没有找到它

我正在使用Visual Studio Ultimate 2012 RC。

根据一位同事的建议,我最终使用了
Process.Start
为部署运行
sqlpackage.exe
。从VisualStudio的角度来看,它不像我希望的那样干净,但它完成了任务。我的引导现在如下所示:

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
和读取标准输出的选项(尽管我还没有对它做任何操作)用于保持任务同步。这样,测试就不会互相影响。这增加了集成测试的执行时间,但这符合我的需要

我意识到我正在做一个完全刷新之前和之后。如果随着我的测试次数的增加,这花费的时间太长,我会重新考虑。但是现在我喜欢确保在测试之前刷新它,并且在测试之后不留下任何痕迹


对于
sqlpackage.exe

面临同样的问题,我发现从上的示例可以很容易地使用NuGet包