【问题标题】:Setup Azure SQL database unit test DevOps environment with tSQLt使用 tSQLt 设置 Azure SQL 数据库单元测试 DevOps 环境
【发布时间】:2023-02-25 02:14:01
【问题描述】:

环境

  • 带有 Azure SQL 的服务器
  • 本地 SQL Server Express
  • 使用 SSDT 部署数据库

计划

  • [开发人员] 在开发期间在 SQL Server Express 上本地运行数据库单元测试
  • [DevOps] 一旦开发人员提交更改,运行管道中的所有单元测试用例,如果所有单元测试通过则继续部署

问题

  • [测试 1 - SQL Server Express 2019] 测试项目部署失败,因为 Azure SQL 使用特定版本的 tSQLt (1.0.5873.27393) 失败并出现错误

    使用 SAFE 或 EXTERNAL_ACCESS 选项为程序集“tSQLtCLR”创建或更改组件失败,因为 sp_configure 的“clr strict security”选项设置为 1。

  • [测试2 - SQL Server Express 2014] 查了2014年的SELECT @@VERION和Azure SQL,版本号好像是一样的(12.0.2000.8),试了试失败报错

    将 Microsoft Azure SQL Database v12 指定为目标平台的项目无法发布到 SQL Server 2014

其他可能的解决方案

  1. 设置 2 个差异项目,其中包括来自同一项目的测试用例,其中一个使用用于 Azure SQL 部署的 tSQLt,另一个使用用于 SQL Server Express 2019 的 tSQLt 进行本地测试(我不确定实现之间是否存在任何差异,可能导致不可预知的错误)
  2. 为每个开发人员创建多个 Azure Sql,以便他们可以并行测试(这对我来说听起来很愚蠢...)

    非常欢迎任何关于如何解决 SQL Server Express 问题或其他可能解决方案的 cmets。

【问题讨论】:

    标签: sql-server azure-sql-database sql-server-data-tools tsqlt sql-server-unit-testing


    【解决方案1】:

    我有一个 SSDT tSQLt 项目,可以很好地部署到 SQL Express/localdb 和 Azure

    (虽然我在实践中没有发现部署到 Azure 并运行 tSQLt 单元测试与仅让 CI 管道针对 localdb 运行它们相比有任何价值 - 但你的里程可能会有所不同 - tSQLt 测试主要是关于测试你的代码是否正确编写这应该与你运行它的平台无关)

    Azure SQL 和可能需要测试的内部部署之间存在差异(例如,RC 与 RCSI 的默认隔离级别可能会在并发条件下导致不同的行为),但 tSQLt 单元测试不是为了测试它。

    我用作调试数据库的配置是 localdb 2019,在其上运行了以下命令

    USE [master]
    
    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'clr strict security', 0; RECONFIGURE;
    EXEC sp_configure 'clr enabled', 1; RECONFIGURE;
    

    “目标平台”是“Azure SQL 数据库”,无需投诉即可部署到 SQL Server 2019 本地数据库。

    这确实意味着我需要将自己限制在两个版本都支持的语法上,但这很少成为问题(如果我有强烈的使用 LEASTGREATEST 的冲动,那么我总是可以改用 SQL Server 2022 本地数据库)

    有时我需要使用仅在 Azure 中支持的语法,但我倾向于发现这只是部署后脚本,我可以添加 IF @@VERSION LIKE '%Azure%' 检查以停止它在 localdb 中运行(并在 EXEC 中隐藏任何不兼容的语法,如 CREATE USER ... FROM EXTERNAL PROVIDER块)。

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多