为 nunit 测试关闭日志记录 EFCore 日志记录

问题描述 投票:0回答:1

我对一个使用 EF core 7.0 的项目进行了单元测试。 我使用 InMemory 提供程序来测试对数据库的查询。 每个测试都会生成很多这样的消息:

Context 'MyContext' started tracking 'Player' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.

如果我打开此选项,我会看到以下消息:

Context 'MyContext' started tracking 'Player' entity with key '{Id: 1}'.

有没有办法完全关闭此类消息?

更新

我尝试使用

NullLoggerProvider
,所以我创建数据库的方法如下:

var loggerFactory = new LoggerFactory();
loggerFactory.AddProvider(NullLoggerProvider.Instance);
return new(new DbContextOptionsBuilder<MyContext>()
    .UseLoggerFactory(loggerFactory)
    .UseInMemoryDatabase(databaseName)
    .Options);

我还在测试项目中添加了

appsettings.json
,看起来:

{
  "Logging": {
    "LogLevel": {
      "Default": "None"
    }
  }
}

但这没有帮助。

c# entity-framework-core nunit
1个回答
0
投票

在尝试上述解决方案、浏览 EFCore 配置文档并在 xUnit 测试中遇到类似行为(由于日志记录过多导致我的管道失败)后,我从 Microsoft 找到了以下信息:

没有数据库的 EF Core 测试

强烈建议不要使用内存中的提供程序进行测试;考虑改用 SQLite,或实施存储库模式。

EF Core 测试使用内存中的 SQLite

使用存储库模式的 EF Core 测试

此外,如此链接中所述

EF 核心内存数据库提供程序

重要 - 新功能未添加到内存数据库中。

是时候采用不同的方法了!

© www.soinside.com 2019 - 2024. All rights reserved.