【发布时间】:2020-05-28 15:51:18
【问题描述】:
在向 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
【问题讨论】:
-
您最初的问题是如何设置环境变量,这就是我回答解决方案的原因。您更新了问题并删除了该部分。即使您正在编辑原始问题,也请保留您的原始问题。您可以使用 EDIT 标签添加新零件。为了能够测试您的代码,您必须遵循 SOLID 原则。在您的代码上,您正在调用打开数据库连接并执行阅读器的静态方法。最好将您的数据访问逻辑分开并将其注入您的 Azure Functions 以便您可以对其进行测试。
-
嗨,Nazim。感谢您的回答。我试图发布我的问题。我在编辑和发布更新的问题时遇到了一些问题。我不得不截断我的问题的一部分。对不起,
标签: c# azure function xunit.net