c# - 使用数据库文件在 Azure Devops 上运行测试

标签 c# unit-testing azure-devops azure-pipelines sql-server-data-tools

有没有办法使用其中一项任务在 Azure Devops 管道上创建数据库文件?

我的想法是在代理上创建一个 localdb(使用 VS)并在该数据库文件上运行单元测试(SSDT),就像我使用 VS 所做的那样。我可以创建数据库文件“工具”>“连接数据库”>“Sql 服务器数据库文件”并输入名称。我可以连接到它并运行测试。我似乎无法在 Azure DevOps 管道上执行此操作。

我知道首选方法是分配 Azure SQL 服务器并针对这些服务器运行测试,但数据库非常小,如果我可以针对数据库文件运行这些测试,这似乎是一个更好的主意。

最佳答案

基本上我找到了一种在代理上完成这一切的方法。但是,如果您使用较新的语法,则必须更新代理 localdb。

- task: CopyFiles@2
  inputs:
    Contents: '**/Output/*.dacpac'
    flattenFolders: true
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |      
      sqllocaldb start MSSQLLocalDB
      sqllocaldb info MSSQLLocalDB

      #import SqlServer module
      Import-Module -Name "SqlServer"

      # create variable with SQL to execute
      $sql = "
      CREATE DATABASE [MyDatabase]
        CONTAINMENT = NONE
        ON  PRIMARY
        ( NAME = N'MyDatabase', FILENAME = N'd:\a\1\s\testing.Data\test\bin\Output\MyDatabase.mdf' , SIZE = 1048576KB , FILEGROWTH = 262144KB )
        LOG ON
        ( NAME = N'MyDatabase_log', FILENAME = N'd:\a\1\s\testing.Data\test\bin\Output\MyDatabase_log.ldf' , SIZE = 524288KB , FILEGROWTH = 131072KB )
      GO

      USE [master]
      GO
      ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT
      GO

      ALTER AUTHORIZATION ON DATABASE::[MyDatabase] TO [sa]
      GO "
      Invoke-SqlCmd -ServerInstance "(localdb)\MSSQLLocalDB" -database master -Query $sql

- task: SqlDacpacDeploymentOnMachineGroup@0
  inputs:
    TaskType: 'dacpac'
    DacpacFile: '$(Build.ArtifactStagingDirectory)/*.dacpac'
    TargetMethod: 'connectionString'
    ConnectionString: 'Data Source=(localdb)\.;Initial Catalog=MyDatabase;Integrated Security=True;'

通过此功能,您可以将生成的 .mdf 文件附加到您的 localdb 并将您的 dacpac 发布到其中。然后,如果您想运行测试,就可以这样做。

关于c# - 使用数据库文件在 Azure Devops 上运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62285909/

相关文章:

c# - 将对象存储在数组中然后访问它们

c# - Azure 自定义日志记录

java - Android 单元测试未为 Mockito stub 方法提供模拟消息

python - 皮西斯。由于execute() 发生错误而阻止执行validate() 方法

azure - Azure Devops Pipeline 中的变量组 yaml 变量表达式

azure-devops - 如何使 Azure DevOps 管道引用其所在的不同存储库?

c# - IIS CLI 为我的项目生成带有站点的 applicationhost.config

c# - 有人试过亚麻吗?

Azure 开发运营 2019 : Can't manage Extensions

javascript - 用 jasmine .toEqual 比较两个不同的对象,一个对象是空的,另一个对象有一个 key 是一个符号,为什么它说它们相等?