gpt4 book ai didi

xunit - 使用 EF Core In Memory 提供程序时无法在单元测试期间获取 EF Core 日志

转载 作者:行者123 更新时间:2023-12-05 07:11:41 27 4
gpt4 key购买 nike

我有一个使用 SQL 数据库的 .net core 2.2 应用程序。我已经使用 EF Core In Memory 提供程序编写了一些单元测试来测试我的数据访问代码。我想生成 SQL 日志(基本上想知道生成的 SQL 语句。我引用了这篇文章 https://learn.microsoft.com/en-us/archive/msdn-magazine/2018/october/data-points-logging-sql-and-change-tracking-events-in-ef-core,但它不起作用(看不到任何日志)。最后我结束了类似

public class TestFixture: IDisposable
{
private static readonly LoggerFactory _loggerFactory
= new LoggerFactory(new[] {
new DebugLoggerProvider((category, level) =>
level == LogLevel.Debug)
//new ConsoleLoggerProvider ((category, level) =>
// category == DbLoggerCategory.Database.Command.Name &&
// level == LogLevel.Debug, true)
});

#region Constructor(s)
public TestFixture()
{

}
#endregion

#region Public Method(s)

public MyDbContext CreateMyDbContext()
{
var options = new
DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase(
"MyDb")
.UseLoggerFactory(_loggerFactory)
.EnableSensitiveDataLogging()
.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking).Options;
return new MyDbContext(options);
}
#endregion

现在我在 VS 输出窗口中收到大量日志,这没有帮助。看起来它们是 EF Core 内部日志,但能够识别生成的 SQL 语句。有谁知道如何在使用 EF Core In Memory 提供程序时在单元/集成测试场景中获取 EF Core 日志?

最佳答案

我刚刚开始工作。仅将我的 DbContext 派生类型和 ILoggerFactory 放在同一个 DI 容器中是不够的。但是明确地让我的上下文类型依赖于 ILoggerFactory,然后将其传递给 UseLoggerFactory 覆盖 OnConfiguring 确实有效。

这是 .NET 6 和 EF Core 6。

public class InMemoryBasicModelContext : BasicModelContext {
private readonly ILoggerFactory lf;

public InMemoryBasicModelContext(ILoggerFactory lf)
=> this.lf = lf;

protected override void OnConfiguring(DbContextOptionsBuilder builder)
=> builder.UseInMemoryDatabase("TestInMemory")
.ConfigureWarnings(b => b.Ignore(InMemoryEventId.TransactionIgnoredWarning))
.EnableSensitiveDataLogging()
.UseLoggerFactory(lf);
}

我怀疑如果我使用的是 GenericHost 事情可能会有所不同(谁知道它的容器中到底设置了什么),但是在构建一个最小系统以了解 In Memory Provider 的使用时我想避免这种情况)。

关于xunit - 使用 EF Core In Memory 提供程序时无法在单元测试期间获取 EF Core 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60706924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com