使用转换后的应用程序设置在构建管道中运行集成测试

时间:2020-04-03 09:26:07

标签: c# .net-core azure-devops xunit

我使用.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连接字符串并提交,它将按预期工作。

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

2 个答案:

答案 0 :(得分:2)

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

首先,您需要在管道中使用set a variable(例如MyConnectionString)来保存Azure连接字符串的值。

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

您可以在this thread中查看示例。

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

希望上面有帮助!

答案 1 :(得分:1)

您可以使用以下脚本在Azure DevOps上启动LocalDB

- script: sqllocaldb start mssqllocaldb