如何使用 ILogger 为 azure 函数 (Httptrigger) 编写单元测试
How to write unit test for azure function (Httptrigger) with ILogger
想要为 HttpTrigger GET 编写单元测试。
方法签名如下:
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
HttpRequestMessage request,
ILogger log)
这里,ILogger
是Microsoft.Extensions.Logging的类型。
如何用这个注入写单元测试用例,
尝试使用以下内容创建 ILogger
的存根,但这需要 LoggerFactory
.
public class LoggerWriter : Microsoft.Extensions.Logging.Logger<ILogger>
{
public LoggerWriter() : base() // this needs logger factory.
{
}
}
用于克服上述问题(Ilogger
注入)的 httptrigger azure 函数的任何示例单元测试都是有帮助的。
当主题方法需要可以轻松模拟和注入的抽象时,确实没有必要扩展实现问题。
以下面的简化示例为例
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
HttpRequestMessage request,
ILogger log
) {
//...omitted for brevity
}
要单独对上述功能进行单元测试,只需提供必要的依赖项即可完成测试并断言预期行为。
[TestMethod]
public async Task Function_Should_Return_Desired_Response() {
//Arrange
var request = new HttpRequestMessage();
//...populate as needed for test
var logger = Mock.Of<ILogger>(); //using Moq for example
//...setup expected behavior
//Act
var response = await MyFunction.Run(request, logger);
//Assert
//...assert desired behavior in the response
}
有一个很棒的博客 post 涵盖了这个主题 :)
https://medium.com/@jeffhollan/serverless-devops-and-ci-cd-part-1-f76f0357cba4
想要为 HttpTrigger GET 编写单元测试。 方法签名如下:
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
HttpRequestMessage request,
ILogger log)
这里,ILogger
是Microsoft.Extensions.Logging的类型。
如何用这个注入写单元测试用例,
尝试使用以下内容创建 ILogger
的存根,但这需要 LoggerFactory
.
public class LoggerWriter : Microsoft.Extensions.Logging.Logger<ILogger>
{
public LoggerWriter() : base() // this needs logger factory.
{
}
}
用于克服上述问题(Ilogger
注入)的 httptrigger azure 函数的任何示例单元测试都是有帮助的。
当主题方法需要可以轻松模拟和注入的抽象时,确实没有必要扩展实现问题。
以下面的简化示例为例
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
HttpRequestMessage request,
ILogger log
) {
//...omitted for brevity
}
要单独对上述功能进行单元测试,只需提供必要的依赖项即可完成测试并断言预期行为。
[TestMethod]
public async Task Function_Should_Return_Desired_Response() {
//Arrange
var request = new HttpRequestMessage();
//...populate as needed for test
var logger = Mock.Of<ILogger>(); //using Moq for example
//...setup expected behavior
//Act
var response = await MyFunction.Run(request, logger);
//Assert
//...assert desired behavior in the response
}
有一个很棒的博客 post 涵盖了这个主题 :) https://medium.com/@jeffhollan/serverless-devops-and-ci-cd-part-1-f76f0357cba4