c# - 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
解决方案
您可以在单元测试中手动设置如下:
Environment.SetEnvironmentVariable("key", "value");
推荐阅读
- node.js - 尝试实现 socket.io 通信时收到 GET 400。Node.js、ELB、Route 53、CloudFront 和 s3
- scala - 将 Hocon 配置读取为 Map[String, String],其中键为点符号和值
- javascript - 无法解析 webpack 中的 node_modules
- ios - 如何等待分配另一个值来运行.onAppear?
- javascript - 如何使用 Selenium 和 Python 在 https://orteil.dashnet.org/cookieclicker/ 中多次单击 Cookie 以播放 cookie clicker
- c# - 主 WPF 窗口的句柄 IntPtr 为零
- python - 信息自由法案 API。API 密钥错误
- wordpress - 无法再在 Ec2 实例上打开 Wordpress Admin
- flutter - player.play 的颤振音频缓存错误
- elixir - 处理请求后运行插件管道