单元测试时的EF核心记录SQL查询

时间:2019-08-23 22:41:40

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

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

  • 在“调试”窗口
  • 在每个测试的“测试资源管理器”窗格的详细视图中。

我的单元测试类似于:

[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将输出定向到测试结果或我不知道的魔术。

感谢您的协助。

2 个答案:

答案 0 :(得分:0)

NUnit的{​​{3}}是您要查找的内容:

...
TestContext.WriteLine($"SQL QUERY:{???}");

编辑:

要获取生成的SQL:

EF核心: TestContext.WriteLine

EF 6:Get SQL code from an EF Core query

答案 1 :(得分:0)

有一个答案here,它显示了如何使用group[0], group[1] or group[2]包来记录EF Core SQL查询...

Microsoft.Extensions.Logging.Console

类似这样:-

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");

更多信息here