【问题标题】:.net core 2.0 tests - how to store settings in test projects?.net core 2.0 测试 - 如何在测试项目中存储设置?
【发布时间】:2017-10-25 16:44:43
【问题描述】:

我需要在我的 .NET Core 2.0 集成测试中存储连接字符串和其他设置(因此,它是一个带有 xUnit 的测试项目)。考虑到这些测试在本地和 VSTS 中运行,我该如何安全地执行此操作?理想情况下,我需要将这些设置单独用于本地环境并在 VSTS 上运行。

【问题讨论】:

  • 完全不相关 - 我说的是 Test 项目 (xUnit)。它没有所有这些。
  • 你用我的解决方案解决了这个问题吗?

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


【解决方案1】:

可以添加多个配置文件,如appsettings.json、appsettings.dev.json、appsettings.test.json,然后设置相关环境的dev值变量并为构建的相关变量设置 test 值。

之后将 appsettings.test.json 文件中的值替换为 Token Replace 任务

简单的步骤:

  1. Microsoft.Extensions.Configuration.Json package 安装到您的xUnit 测试项目中
  2. 在项目中添加appsettings.json、appsettings.dev.json和appsettings.test.json配置文件

appsettings.json:

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
  "OtherSettings": {
    "UserName": "name1",
    "Pass": "pass1"
  }
}

appsettings.dev.json:

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=dev;Trusted_Connection=True;"
  },
  "OtherSettings": {
    "UserName": "devname1",
    "Pass": "pass1"
  }
}

appsettings.test.json:

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=#{testDev}#;Trusted_Connection=True;"
  },
  "OtherSettings": {
    "UserName": "#{testName}#",
    "Pass": "pass1"
  }
}
  1. 将复制到这些文件的输出目录属性设置为如果较新则复制。 4:简单的测试代码

            [Fact]
            public void Test1()
            {
                var envVariable = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

                Console.WriteLine($"env: {envVariable}");
                var config = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json")
                     .AddJsonFile($"appsettings.{envVariable}.json", optional: true)
                    .Build();
                var conn = config.GetConnectionString("BloggingDatabase");
                var otherSettings = config["OtherSettings:UserName"];
                Console.WriteLine(conn);
                Console.WriteLine(otherSettings);
            }
  1. 添加ASPNETCORE_ENVIRONMENT(值:test)、testDevtestName变量来构建定义,您可以点击锁定图标将变量类型更改为机密
  2. 在构建任务之前添加替换令牌任务(目标文件:**\appsettings.test.json

【讨论】:

  • 我刚试过。我无法获得 ASPNETCORE_ENVIRONMENT 值。当我在本地运行测试时总是空的:(你如何在 VS2017 中为测试项目(xUnit)设置 ASPNETCORE_ENVIRONMENT ?
  • 只需在您的机器中设置环境变量。
  • 关于设置环境变量的便捷方式的问题,您可以开一个新的帖子。
  • 这是非常不安全的。我们需要一种能够通过命令行或其他一些临时/安全机制传递这些值的机制,这样这些值就不会在 git 中持久化。 IE。我应该能够将设置传递给 vsts 中的测试程序集,以指定存储其余设置的 Azure KeyVault 存储,并且 VSTS 应该加密存储这些值。
猜你喜欢
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多