首页 > 解决方案 > 使用转换后的 appsettings 在构建管道中运行集成测试

问题描述

我使用 .NET Core 3.1 和 xUnit 在我的解决方案中添加了一个集成测试项目。在这个测试项目中,我还添加了一个 appsettings.json,其中包含一个应该在本地使用的连接字符串。

  "ConnectionStrings": {
    "DefaultConnection": "Data Source=(LocalDb)\\MSSQLLocalDb;Initial Catalog=MyApp_IntegrationTests;Integrated Security=True"
  }

我还在 Azure DevOps 的构建管道中添加了以下内容:

- task: DotNetCoreCLI@2
  displayName: 'Run integration tests'
  inputs:
    command: test
    projects: '**/*Tests.csproj'
    arguments: '--configuration $(buildConfiguration)'

这会失败,因为 Azure 不支持 LocalDB。这是有道理的,但我不知道如何转换管道中测试项目使用的 appsettings.json。如果我在 appsettings.json 中放入 Azure 连接字符串并提交它,它会按预期工作。

关于如何解决这个问题的任何建议?

标签: c#.net-coreazure-devopsxunit

解决方案


如果要在管道中将 LocalDB 连接字符串替换为 Azure 连接字符串。您可以使用变量替换任务(例如Magic Chunks扩展)来替换 appsettings.json 中的 connectionString。

首先,您需要在管道中设置一个变量(例如 MyConnectionString)来保存 Azure 连接字符串的值。

然后可以在Dotnet Test Task之前添加Config Transfromation Task,并使用Config Transfromation Task中的语法引用这个变量来替换LocalDB connectionString。$(MyConnectionString)

您可以查看此线程中的示例。

另一种解决方法是使用自托管代理来构建您的管道。由于 Azure 代理无法与您的 localDB 通信,因此您可以在本地计算机上设置自托管代理。您的 localDB 可以访问自托管代理。

以上希望有帮助!


推荐阅读