Azure功能单元测试问题

时间:2020-04-09 19:15:01

标签: c# azure function xunit.net

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

下面是给定的示例代码,其中原始函数使用键 sqldb_conn 从Environment变量获取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函数编写的示例测试代码:

[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

1 个答案:

答案 0 :(得分:1)

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

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