Unit testing 使用FunctionStartup进行Azure功能单元测试
我正在为azure函数编写一个单元测试项目,它使用继承FunctionStartUp的Startup类。在这个启动类中,我加载了所有依赖项和配置,并加载了环境变量 问题是在运行单元测试方法时,我得到的环境变量值为null(因为没有调用启动类,所以没有设置环境变量)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”
有人能告诉我如何加载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 ...
}