我使用.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连接字符串并提交,它将按预期工作。
关于如何解决此问题的任何建议?
答案 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