如何在通过 VS Code 运行 C# 测试之前从 .env 加载环境变量

问题描述 投票:0回答:1

我正在尝试删除项目存储库中的

.runsettings
文件,并将所有配置变量保留在单个
.env
文件中。

我陷入困境的一个地方是通过 VS Code 运行测试时的场景。我正在编写 C# 并使用 C# 开发工具包/C# 扩展(Linux 操作系统)。这些扩展会自动检测 NUnit 测试并将其显示在测试窗口中。我可以单击“运行测试”并执行所有测试。问题是,我发现如何为这些测试运行提供环境变量的唯一方法是将

dotnet.unitTests.runSettingsPath
配置选项设置为
.runsettings
文件的位置。我不想仅仅为了这一功能而保留这个
.runsettings
文件。当我触发“运行测试”功能时,如何告诉 VS Code 从 .env 文件加载环境变量。

以防万一有人问,我的tasks.json 中没有特殊任务,也没有用于测试运行的launch.json 文件中的特殊条目。看起来 VS Code 足够智能,可以自动找出如何在我的项目中查找、加载和运行测试。

visual-studio-code testing environment-variables nunit .env
1个回答
0
投票

我今天遇到了同样的问题,我的解决方案如下:

  1. 在测试项目的根文件夹中创建了一个
    test.env
    文件,其中包含运行测试所需的环境变量。 (可选:将其添加到我的 .gitignore 以避免对文件进行版本控制,因为每个开发人员都有自己的值)
  2. 通过将以下行添加到
    MyProject.Tests.csproj
    文件中,指示 .NET 将 env 文件复制到输出目录(例如 bin/Debug/net8.0):
<ItemGroup>
  <Content Include="*.env">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>
  1. 在我的测试项目中添加了对
    dotenv.net
    Nuget 包
    的引用。有关如何执行此操作的更多信息可以在 Nuget 页面中找到。
  2. 使用以下几行在我的测试类中加载 env 文件(
    SetUp
    是 NUnit 包中的注释。如果您使用其他测试框架(如 xUnit),您可能需要不同的注释):
private const string ENV_FILE = "test.env";

[SetUp]
public void SetUp()
{
    if (File.Exists(ENV_FILE))
    {
        DotEnv.Load(options: new DotEnvOptions(envFilePaths: [ENV_FILE]));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.