如何用ILogger编写Azure函数的单元测试(Http触发器)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

想要为HttpTrigger编写单元测试。signature方法如下:

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.
    {
    }
}
提问于
用户回答回答于

当Subject方法需要一个可以很容易模拟和注入的抽象时,实际上不需要扩展实现关注点。

以以下简化的例子为例

public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
    HttpRequestMessage request, 
    ILogger log
) {
    //...omitted for brevity
}

要单独测试上面的函数,只需为完成测试提供必要的依赖关系并assert预期的行为。

[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 
}
用户回答回答于

参考:https://medium.com/@jeffhollan/serverless-devops-and-ci-cd-part-1-f76f0357cba4

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问3 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券