dependency-injection - 如何使用 ILogger 为 azure 函数(Httptrigger)编写单元测试

标签 dependency-injection nunit azure-functions mstest azure-functions-runtime

想为 HttpTrigger GET 编写单元测试。
具有如下方法签名:

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

在这里,ILogger是 Microsoft.Extensions.Logging 的类型。

如何使用此注入(inject)编写单元测试用例,
试图创建 ILogger 的 stub 使用下面的东西,但这需要LoggerFactory .
public class LoggerWriter : Microsoft.Extensions.Logging.Logger<ILogger>
{
    public LoggerWriter() : base() // this needs logger factory.
    {
    }
}

httptrigger azure 函数的任何示例单元测试以克服上述问题(Ilogger 注入(inject))都是有帮助的。

最佳答案

当主题方法需要可以轻松模拟和注入(inject)的抽象时,确实不需要扩展实现问题。

采取以下简化示例

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 
}

关于dependency-injection - 如何使用 ILogger 为 azure 函数(Httptrigger)编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699663/

相关文章:

android - 跨 Gradle 模块使用 Dagger Multibinding

testing - NUnit - 同名的多个属性?链接到要求

c# - 通过 Azure Function 2.x 的 Http 触发器函数的构造函数注入(inject) ILogger

azure-functions - System.Private.Uri : Value cannot be null error with Azure Function

java - spring:通过读取另一个 bean 的属性来设置一个 bean 的属性?

c# - 在 Asp .Net MVC Composition Root 中配置 IoC 容器的最佳实践

.net - 从依赖项中获取依赖项

testing - TFS 2013 将测试用例关联自动化链接到 xUnit 测试

c# - NUnit 错误 : Not a test assembly

c# - 我可以在没有存储帐户的情况下使用带有 HTTP 触发器的 Azure Function 吗