【问题标题】:SSDT projects + integration/end-to-end tests + TearDownSSDT 项目 + 集成/端到端测试 + TearDown
【发布时间】:2019-02-17 00:28:46
【问题描述】:

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

PS:

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

var p = new System.Diagnostics.Process
{
    StartInfo =
    {
    FileName =
        @"C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe /Action:Publish /SourceFile:“D:\Database_20151114_18-23-29.dacpac” Profile:”D:\LocalDatabase.publish.xml”",
    UseShellExecute = true
    }
};
p.Start();

不幸的是,我得到:

{"The system cannot find the file specified"}

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

【问题讨论】:

    标签: c# nunit integration-testing xunit sql-server-data-tools


    【解决方案1】:

    假设 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 参数,请参阅 here。请注意,sqlpackage.exe 可能与我上面使用的路径不同。

    【讨论】:

    • 我在本地安装了 SSDT,但找不到 sqlpackage.exe。有什么想法吗?
    • 忽略我,刚找到。在我的例子中:C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin
    【解决方案2】:

    这样的事情似乎可以解决问题:

    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 文件。这也可以自动化吗?

    【讨论】:

      【解决方案3】:

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

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

      excellent existing answer 提供了有关如何执行此操作的所有详细信息。

      【讨论】:

        猜你喜欢
        • 2018-06-26
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多