Skip to content

Commit bca9594

Browse files
committed
Output SQL when query tests fail
1 parent e33bfbd commit bca9594

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

test/EFCore.Relational.Specification.Tests/TestUtilities/TestSqlLoggerFactory.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,24 @@ public void OutputSql()
4242
Logger.TestOutputHelper?.WriteLine(Sql);
4343
}
4444

45+
public override void WriteTestOutput()
46+
{
47+
var failedSqlStatements = ((TestSqlLogger)Logger).FailedSqlStatements;
48+
if (Logger.TestOutputHelper is ITestOutputHelper outputHelper && failedSqlStatements.Count > 0)
49+
{
50+
outputHelper.WriteLine("Failed SQL queries that resulted in database errors:");
51+
outputHelper.WriteLine("");
52+
53+
foreach (var sql in failedSqlStatements)
54+
{
55+
outputHelper.WriteLine(sql);
56+
outputHelper.WriteLine("");
57+
}
58+
}
59+
60+
base.WriteTestOutput();
61+
}
62+
4563
public void AssertBaseline(string[] expected, bool assertOrder = true, bool forUpdate = false)
4664
{
4765
var offset = forUpdate ? 1 : 0;
@@ -281,6 +299,8 @@ protected class TestSqlLogger(bool shouldLogCommands) : ListLogger
281299
public List<string> SqlStatements { get; } = [];
282300
public List<string> Parameters { get; } = [];
283301

302+
public List<string> FailedSqlStatements { get; } = [];
303+
284304
private readonly StringBuilder _stringBuilder = new();
285305

286306
protected override void UnsafeClear()
@@ -289,6 +309,7 @@ protected override void UnsafeClear()
289309

290310
SqlStatements.Clear();
291311
Parameters.Clear();
312+
FailedSqlStatements.Clear();
292313
}
293314

294315
protected override void UnsafeLog<TState>(
@@ -343,7 +364,13 @@ protected override void UnsafeLog<TState>(
343364
parameters = _stringBuilder.ToString();
344365
}
345366

346-
SqlStatements.Add(parameters + commandText);
367+
var sqlStatement = parameters + commandText;
368+
SqlStatements.Add(sqlStatement);
369+
370+
if (eventId.Id == RelationalEventId.CommandError.Id)
371+
{
372+
FailedSqlStatements.Add(sqlStatement);
373+
}
347374
}
348375
}
349376
else

0 commit comments

Comments
 (0)