@@ -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