【问题标题】:Azure Function Unit Testing with FunctionStartup使用 FunctionStartup 进行 Azure 函数单元测试
【发布时间】:2020-02-13 07:16:03
【问题描述】:

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

问题是在运行单元测试方法时,我将环境变量值设为 null(因为未调用 Startup 类,因此未设置环境变量)。

谁能建议我如何加载在 local.Setting.json 和 appsetting.json 文件中设置的环境变量?

【问题讨论】:

  • 你能否展示一些代码来更好地展示这个问题。

标签: unit-testing azure-functions


【解决方案1】:

在您的单元测试代码中,您必须使用Environment.SetEnvironmentVariable("key", "value"); 设置变量

【讨论】:

    【解决方案2】:

    在克里斯的回答之上添加一些信息。 你可以参考这个帖子How to get environment variable in Xunit Test

    我似乎很期待实现这一点。您只需要创建另一个类,它将由所有其他类共享。在 Xunit 中,他们称之为 Fixture。见链接Shared context between test

    在这个课程中,我将从我的目标测试项目中读取我的配置文件,并设置环境变量。见链接How to get environment variable in Xunit Test

    代码示例

    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; }
    }
    

    我的 Xunit 测试类(我稍作修改以适应我的使用情况):

    public class CreateAzureResourcesTests : IClassFixture<SharedDataFixture>
    {
        AzureLoginInfo azureLoginInfo;
    
        public CreateAzureResourcesTests (SharedDataFixture fixture)
        {
            this.fixture = fixture;
        }
    
        // ... write test ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2019-05-16
      相关资源
      最近更新 更多