首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在我的ILogger<T>核心代码单元测试中提供.NET?

如何在我的ILogger<T>核心代码单元测试中提供.NET?
EN

Stack Overflow用户
提问于 2017-08-07 09:42:24
回答 10查看 23.7K关注 0票数 33

的构造函数签名的类

代码语言:javascript
运行
复制
public Foo(ILogger<Foo> logger) {
    // ...
}

我想要测试,我需要某种方式在测试中提供一个ILogger<Foo>。它是曾被问过,但是唯一的答案是需要设置一个完整的服务注册中心,配置日志记录并从那里解析记录器。我觉得这太过分了。

是否有一种简单的方法来为测试目的提供ILogger<T>的实现?

注意:它不需要实际记录任何东西--只是当被测试的对象试图记录某件东西时,不要爆炸。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2017-08-07 10:00:10

你有两个选择:

  1. 手工创建ILogger<Foo>的空实现,并将其实例传递给ctor。
  2. 使用一些模拟框架(如Moq、NSubstitute等)动态创建相同的空实现。
票数 3
EN

Stack Overflow用户

发布于 2018-12-18 16:28:41

从DotNetCore2.0开始,有一个通用的NullLogger类可用:

代码语言:javascript
运行
复制
var foo = new Foo(NullLogger<Foo>.Instance);

https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.abstractions.nulllogger-1?view=aspnetcore-2.1 (docs) https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging.Abstractions/NullLoggerOfT.cs (源)

或者如果你需要它作为你服务的一部分:

代码语言:javascript
运行
复制
services.AddSingleton<ILoggerFactory, NullLoggerFactory>();

https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.abstractions.nullloggerfactory?view=aspnetcore-2.1 (博士)

票数 46
EN

Stack Overflow用户

发布于 2017-10-23 00:12:16

您可以使用ILogger<Foo>作为工厂创建一个NullLoggerFactory实例。

考虑以下控制器:

代码语言:javascript
运行
复制
public abstract class Foo: Controller
{
    public Foo(ILogger<Foo> logger) {
        Logger = logger;
    }

    public ILogger Logger { get; private set; }
}

一个样本单元测试可以是:

代码语言:javascript
运行
复制
[TestMethod]
public void FooConstructorUnitTest()
{
    // Arrange
    ILogger<FooController> logger = new Logger<FooController>(new NullLoggerFactory());

    // Act
    FooController target = new FooController(logger);

    // Assert
    Assert.AreSame(logger, target.Logger);
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45543869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档