c# - 单元测试时 EF Core 记录 SQL 查询

标签 c# unit-testing logging nunit ef-core-2.2

我正在 EF Core 2.2 中的 DbContext(到 Oracle 数据库)上运行一些单元测试 (NUnit),我想查看 SQL 查询它是为每个单元测试构建的,最好是

  • 在调试窗口
  • 在“测试资源管理器” Pane 的每个测试的详细信息 View 中。

我有一个类似于以下内容的单元测试:

[SetUp]
public void Setup()
{
    var options = new DbContextOptionsBuilder<MyContext>()
        .UseOracle("some connection string")
        .Options;

    _context = new MyContext(options);
}
[Test]
public void We_can_count_all_the_things()
{
    var count = _context.Things.Count();

    Assert.That(count, Is.GreaterThan(0));

    // something like this for Test output:
    Assert.Pass($"SQL QUERY:{???}")
}

...或者我可以使用 ILogger 将输出直接输出到测试结果或一些我不知道的魔法。

感谢您的帮助。

最佳答案

有一个答案 here显示如何使用 Microsoft.Extensions.Logging.Console 包记录 EF Core SQL 查询...

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
        .UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");

像这样:-

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});

更多信息here

关于c# - 单元测试时 EF Core 记录 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633746/

相关文章:

c# - 无法从 Visual Studio C# 连接到数据库

c# - 在代码隐藏事件中调用 View 模型方法是否会破坏 MVVM?

hadoop - 记录大数据以使用 Hadoop 组织和存储它并使用 Hive 查询它的正确方法是什么?

unit-testing - Golang单元测试: error conditions

python - 如果我从 python 中的多个不同进程登录同一个文件会发生什么?

MongoDB 记录所有查询

c# - MongoDb c# 驱动程序 2.0 BsonNull 用法

c# - WPF 中的文本框焦点问题

java - Spring-Boot 1.4.0 使用随机端口示例

unit-testing - ServiceStack 服务的单元测试