首页 > 解决方案 > Azure 功能单元测试问题

问题描述

在向 Azure Functions 编写单元测试时如何设置环境变量?

下面是一个给定的示例代码,其中原始函数使用键sqldb_conn从环境变量中获取 SQL 连接字符串。

namespace LoanData.API
{
    public static class LoanFunction
    {

        [FunctionName("get-loan")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation($"C# HTTP trigger function executed at: {DateTime.Now}");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            List<Models.Loan> loan = new List<Models.Loan>();

            var SqlConnStr = Environment.GetEnvironmentVariable("sqldb_conn");

            try
            {
                String commandText = "SELECT * FROM [dhub_data].[LOAN_INFO_V2]";
                using (SqlDataReader reader = Utils.SQLHelper.ExecuteReader(SqlConnStr, commandText, CommandType.Text, null))
                {
                    if (!reader.HasRows)
                    {
                        log.LogInformation("No data returned");
                    }

                    while (reader.Read())
                    {
                        Models.Loan loan = new Models.Loan();
                        loan.ID =  SQLReaderExtensions.SafeGetString(reader, "ID");
                        loan.NAME = SQLReaderExtensions.SafeGetString(reader, "NAME");
                        loan.LAST_UPDATE_DATE = SQLReaderExtensions.SafeGetString(reader, "LAST_UPDATE_DATE");
                        loan.CREATED_BY = SQLReaderExtensions.SafeGetString(reader, "CREATED_BY");
                        loan.CREATION_DATE = SQLReaderExtensions.SafeGetString(reader, "CREATION_DATE");
                        loanResponse.Add(loan);
                        log.LogInformation(loan.ToString());
                    }
                    reader.Close();
                }

                if (loanResponse.Count > 0)
                {
                    return new OkObjectResult(loanResponse);
                }
                else
                {
                    return new NotFoundResult();
                }
            }
            catch (Exception ex)
            {
                log.LogError(ex.Message);
                return new BadRequestObjectResult(ex.Message);
            }
        }
    }
}

以下是为上述 Azure Function 编写的示例测试代码:

[Fact]
public async void Http_trigger_should_return_known_string()
{
    var request = TestFactory.CreateHttpRequest("name", "Bill");
    var response = (OkObjectResult)await HttpTrigger.Run(request, logger);
    Assert.Equal("Hello, Bill", response.Value);
}

如何修改它以适应我的功能?关注https://docs.microsoft.com/en-us/azure/azure-functions/functions-test-a-function

标签: c#azurefunctionxunit.net

解决方案


您可以在单元测试中手动设置如下:

Environment.SetEnvironmentVariable("key", "value");

推荐阅读