C# SSDT项目+;集成/端到端测试&x2B;拆卸

C# SSDT项目+;集成/端到端测试&x2B;拆卸,c#,nunit,integration-testing,xunit,sql-server-data-tools,C#,Nunit,Integration Testing,Xunit,Sql Server Data Tools,假设我有一个sql server数据工具项目(SSDT)和一系列集成/端到端测试(故意不说单元测试)。有没有办法通过测试类库中的代码来拆卸和重新发布现有的测试数据库 附言: 我目前正在尝试(路径和文件名简化): 不幸的是,我得到了: {"The system cannot find the file specified"} dacpac和xml文件肯定在那里。有什么想法吗?此外,是否可以自动创建最新的dacpac文件?假设运行测试的计算机上安装了SSDT,则可以通过TearDown中的shel

假设我有一个sql server数据工具项目(SSDT)和一系列集成/端到端测试(故意不说单元测试)。有没有办法通过测试类库中的代码来拆卸和重新发布现有的测试数据库

附言:

我目前正在尝试(路径和文件名简化):

不幸的是,我得到了:

{"The system cannot find the file specified"}

dacpac和xml文件肯定在那里。有什么想法吗?此外,是否可以自动创建最新的dacpac文件?

假设运行测试的计算机上安装了SSDT,则可以通过TearDown中的shell命令运行sqlpackage.exe。sqlpackage.exe是SSDT用来发布数据库的

[TearDown]
public void TearDown() {
   System.Diagnostics.Process p = new System.Diagnostics.Process();
   p.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe /Action:Publish /SourceFile:C:\DbProject\bin\Debug\DbProject.dacpac /TargetServerName:localhost /TargetDatabaseName:TestDb";
   p.StartInfo.UseShellExecute = true;
   p.Start();
}

有关sqlpackage.exe参数,请参阅。请注意,sqlpackage.exe的路径可能与我上面使用的路径不同。

类似的方法似乎可以实现以下目的:

const string dacPacFileName = @"D:\Bla.dacpac";
var connectionString = ConfigurationManager.ConnectionStrings["BlaConnectionString"].ConnectionString;

var dacPackage = DacPackage.Load(dacPacFileName);
var dacServices = new DacServices(connectionString);      
var dacOptions = new DacDeployOptions();
dacOptions.CreateNewDatabase = true;
dacServices.Deploy(dacPackage, "Bla", true, dacOptions); 

但是,它仍然需要手动创建dapac文件。这也可以自动化吗?

是的,完全可以自动化整个过程。大致是这样的:

  • 在端到端测试项目中添加对
    Microsoft.Build
    库的引用
  • 使用该库从代码构建测试项目,以获得最新的DacPac
  • 使用或通过添加对
    Microsoft.SqlServer.Dac
    库的引用
  • 使用该库中与Dac相关的类和方法,在每次测试开始时使用创建的DacPac发布数据库的新副本

这包含了有关如何执行此操作的所有详细信息。

我在本地安装了SSDT,但找不到sqlpackage.exe。有什么想法吗?别理我,只要找到就行了。在我的例子中:C:\ProgramFiles(x86)\Microsoft SQL Server\110\DAC\bin
const string dacPacFileName = @"D:\Bla.dacpac";
var connectionString = ConfigurationManager.ConnectionStrings["BlaConnectionString"].ConnectionString;

var dacPackage = DacPackage.Load(dacPacFileName);
var dacServices = new DacServices(connectionString);      
var dacOptions = new DacDeployOptions();
dacOptions.CreateNewDatabase = true;
dacServices.Deploy(dacPackage, "Bla", true, dacOptions);