c# - 使用转换后的 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 连接字符串并提交它,它会按预期工作。
关于如何解决这个问题的任何建议?
解决方案
如果要在管道中将 LocalDB 连接字符串替换为 Azure 连接字符串。您可以使用变量替换任务(例如Magic Chunks扩展)来替换 appsettings.json 中的 connectionString。
首先,您需要在管道中设置一个变量(例如 MyConnectionString)来保存 Azure 连接字符串的值。
然后可以在Dotnet Test Task之前添加Config Transfromation Task,并使用Config Transfromation Task中的语法引用这个变量来替换LocalDB connectionString。
$(MyConnectionString)
您可以查看此线程中的示例。
另一种解决方法是使用自托管代理来构建您的管道。由于 Azure 代理无法与您的 localDB 通信,因此您可以在本地计算机上设置自托管代理。您的 localDB 可以访问自托管代理。
以上希望有帮助!
推荐阅读
- c# - 继承不明确
- jdbc - 在 Groovy 脚本中解析 jdbc 响应(直到最大行数值)
- open62541 - 如何通过“登录”用户设置不同的对象视图?
- angular - 如何安装 highcharts-angular *和* highcharts?
- vue.js - 在一个基于SFC的vuejs项目上使用paperjs
- php - 按 ID 显示 WooCommerce 变体(常规或销售)价格
- eslint - ESLint 抱怨箭头函数返回对象
- vba - 使用 access vba 检查 windows 日期格式
- java - 在元素上执行的 Selenium Java 单击不起作用
- javascript - 如何在angular2中从一个组件连接到另一个组件