将环境变量传递给Visual Studio 2019中的测试

问题描述

似乎是一个非常琐碎的问题,但令我惊讶的是,我在网络上找不到任何提及。

我有一个Nunit测试项目(别人写的,我不想改变太多),我需要调试。这些测试取决于它们使用Environment.GetEnvironmentvariable读取的环境变量。

我的问题是:在Visual Studio中调试测试时,有没有一种方法可以传递环境变量?

我知道我通过 Project Properties-> Debug 调试可执行项目时可以传递环境变量,但这在运行测试(例如通过 Test Explorer )时不会生效。强>)。我也知道我可以通过.runsettings文件传递测试参数,但是只能通过TestContext类进行访问。

解决方法

我也知道我可以通过 .runsettings 文件传递​​测试参数,但这些只能通过 TestContext 类访问。

您也可以在 .runsettings 文件中specify environment variables

<?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>

或者,您可以 implement 一个 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",};
    }
}

您还可以通过 .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>
,

如果要在调试项目时更改环境变量而不中断它,可以尝试在系统环境变量中进行设置。

1),创建一个名为number

的系统环境变量

enter image description here

2)在您的代码中使用此代码:

string str=  Environment.GetEnvironmentVariable("number",EnvironmentVariableTarget.Machine);

它将在您的代码中获取系统环境变量number

3)开始调试该项目并在其上设置断点,如果要更改该变量,可以直接在计算机属性下更改系统环境变量number上的值

之后,只需将光标移回代码行,即可使用更改后的值。

======================================

更新1

enter image description here

更改系统变量number的值时,应单击OK保存新值。然后将断点的光标移回以获得新值。

此外,您应该启用Edit and Continue option

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...