如何在单元测试中使用环境变量(.net core)

ayo*_*234 7 .net c# mstest .net-core asp.net-core

我有一个方法,我试图测试它使用我的“local.settings.json”中的环境变量

private static string _environmentVar = Environment.GetEnvironmentVariable("envirnomentVarConfig");

public string MyMethod()
{
    var result = DoStuff(_environmentVar)
    return result;  
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我正在调用此方法,并且在调试时,我可以看到 _environmentVar 为空。

我需要在测试中设置 environmentVarConfig 吗?如果是这样怎么办?

ayo*_*234 21

通过使用以下方法在测试中设置变量来解决此问题:

Environment.SetEnvironmentVariable("environmentVarConfig", "environmentVarValue");
Run Code Online (Sandbox Code Playgroud)

  • 请注意:可能不适用于需要重新启动的机器范围变量 (2认同)

Zar*_*rat 12

您可以在文件中指定环境变量.runsettings

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <RunConfiguration>
        <EnvironmentVariables>
            <YOUR_VARIABLE>Value for your variable</YOUR_VARIABLE>
            <SOME_OTHER_VARIABLE>With another Value</SOME_OTHER_VARIABLE>
        </EnvironmentVariables>
    </RunConfiguration>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过实现DataCollector提供环境变量ITestExecutionEnvironmentSpecifier

// Add a reference to nuget package `Microsoft.TestPlatform.ObjectModel`
// The assembly name must end with `Collector` (i.e. match `*collector.dll`)

[DataCollectorFriendlyName("my own example collector")]
[DataCollectorTypeUri("datacollector://myown/examplecollector/1.0")]
public class MyDataCollector : DataCollector, ITestExecutionEnvironmentSpecifier
{
    public override void Initialize(
        XmlElement configurationElement,
        DataCollectionEvents events,
        DataCollectionSink dataSink,
        DataCollectionLogger logger,
        DataCollectionEnvironmentContext environmentContext)
    {
        // inspect configurationElement for your custom settings
    }

    public IEnumerable<KeyValuePair<string, string>> GetTestExecutionEnvironmentVariables()
    {
        return new Dictionary<string, string>
        {
            ["YOUR_VARIABLE"] = "your value",
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过以下文件配置数据收集器.runsettings

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <RunConfiguration>
        <TestAdaptersPaths>path/where/to/find/your/collector</TestAdaptersPaths>
    </RunConfiguration>
    <DataCollectionRunSettings>
        <DataCollectors>
            <DataCollector friendlyName="my own example collector" uri="datacollector://myown/examplecollector/1.0">
                <Configuration>
                    <SomeSettingHere/>
                </Configuration>
            </DataCollector>
        </DataCollectors>
    </DataCollectionRunSettings>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)