Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用FunctionStartup进行Azure功能单元测试_Unit Testing_Azure Functions - Fatal编程技术网

Unit testing 使用FunctionStartup进行Azure功能单元测试

Unit testing 使用FunctionStartup进行Azure功能单元测试,unit-testing,azure-functions,Unit Testing,Azure Functions,我正在为azure函数编写一个单元测试项目,它使用继承FunctionStartUp的Startup类。在这个启动类中,我加载了所有依赖项和配置,并加载了环境变量 问题是在运行单元测试方法时,我得到的环境变量值为null(因为没有调用启动类,所以没有设置环境变量) 有人能告诉我如何加载local.Setting.json和appsetting.json文件中设置的环境变量吗?在单元测试代码中,必须使用Environment.SetEnvironmentVariable(“key”、“value”

我正在为azure函数编写一个单元测试项目,它使用继承FunctionStartUp的Startup类。在这个启动类中,我加载了所有依赖项和配置,并加载了环境变量

问题是在运行单元测试方法时,我得到的环境变量值为null(因为没有调用启动类,所以没有设置环境变量)


有人能告诉我如何加载local.Setting.json和appsetting.json文件中设置的环境变量吗?

在单元测试代码中,必须使用
Environment.SetEnvironmentVariable(“key”、“value”)设置变量

在Chris的答案上添加一些信息。 你可以参考这篇文章

对我来说,实现这一点似乎很有希望。您只需创建另一个类,该类将由所有其他类共享。在Xunit,他们称之为固定装置。参见链接

在这个类中,我将从目标测试项目中读取配置文件,并设置环境变量。参见链接

代码示例

public class SharedDataFixture: IDisposable
{
    public SharedDataFixture()
    {
        using (var file = File.OpenText("D:\\TargetProject\\local.settings.json"))
        {
            var reader = new JsonTextReader(file);
            var jObject = JObject.Load(reader);

            var variables = jObject.GetValue("Values").ToString();
            var keyValuePairs = JsonConvert.DeserializeObject<Dictionary<string, string>>(variables);


            foreach (var pair in keyValuePairs)
            {
                Environment.SetEnvironmentVariable(pair.Key, pair.Value);
            }
        }

        string keyVaultName = System.Environment.GetEnvironmentVariable("AZURE_KEY_VAULT");

        //Retrieving my json values using environment variable set
        azureLoginInfo = new AzureLoginInfo(keyVaultName);

        // ... other data
    }

    public void Dispose()
    {
        // ... clean up test data from the database ...
    }

    public AzureLoginInfo azureLoginInfo  { get; private set; }
}
公共类SharedDataFixture:IDisposable
{
公共SharedDataFixture()
{
使用(var file=file.OpenText(“D:\\TargetProject\\local.settings.json”))
{
var reader=新的JsonTextReader(文件);
var jObject=jObject.Load(读卡器);
var variables=jObject.GetValue(“值”).ToString();
var keyValuePairs=JsonConvert.DeserializeObject(变量);
foreach(keyValuePairs中的var对)
{
SetEnvironmentVariable(pair.Key,pair.Value);
}
}
字符串keyVaultName=System.Environment.GetEnvironmentVariable(“AZURE_KEY_VAULT”);
//使用环境变量集检索我的json值
azureLoginInfo=新azureLoginInfo(关键字名称);
//…其他数据
}
公共空间处置()
{
//…从数据库中清除测试数据。。。
}
公共AzureLoginInfo AzureLoginInfo{get;private set;}
}
我的Xunit测试类(我对它进行了一些修改以适应我的使用):

公共类CreateAzureResourcesTests:IClassFixture
{
AzureLoginInfo AzureLoginInfo;
公共CreateAzureResourcesTests(SharedDataFixture夹具)
{
这个。夹具=夹具;
}
//…写测试。。。
}

您能否展示一些代码以更好地演示问题。
public class CreateAzureResourcesTests : IClassFixture<SharedDataFixture>
{
    AzureLoginInfo azureLoginInfo;

    public CreateAzureResourcesTests (SharedDataFixture fixture)
    {
        this.fixture = fixture;
    }

    // ... write test ...
}