单元测试时 EF Core 日志记录 SQL 查询
EF Core Logging SQL Queries when Unit Testing
我在 EF Core 2.2 中对我的 DbContext
(到 Oracle 数据库)进行了一些单元测试 (NUnit),我想查看 SQL
查询它正在为每个单元测试构建,最好是
- 在调试中window和
- 在每个测试的“测试资源管理器”窗格的详细视图中。
我的单元测试类似于:
[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
将输出定向到测试结果或我不知道的一些魔法。
感谢任何帮助。
NUnit
的TestContext.WriteLine就是你要找的:
...
TestContext.WriteLine($"SQL QUERY:{???}");
编辑:
得到生成的SQL:
EF 核心:
Get SQL code from an EF Core query
EF 6:How do I view the SQL generated by the Entity Framework?
有一个答案 显示了如何使用 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
我在 EF Core 2.2 中对我的 DbContext
(到 Oracle 数据库)进行了一些单元测试 (NUnit),我想查看 SQL
查询它正在为每个单元测试构建,最好是
- 在调试中window和
- 在每个测试的“测试资源管理器”窗格的详细视图中。
我的单元测试类似于:
[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
将输出定向到测试结果或我不知道的一些魔法。
感谢任何帮助。
NUnit
的TestContext.WriteLine就是你要找的:
...
TestContext.WriteLine($"SQL QUERY:{???}");
编辑:
得到生成的SQL:
EF 核心: Get SQL code from an EF Core query
EF 6:How do I view the SQL generated by the Entity Framework?
有一个答案 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