2017-01-06 1 views
0

Ich versuche erfassen die SQL-Anweisungen von nhibernate von meinen XUnit 2.x Unittests in der ReSharper Ausgabe des Einheit Test Sessions angezeigt werden, aber es die SQL-Anweisungen loggt .Wie SQL-Anweisungen von NHibernate mit ReSharper und xunit 2

Mit MSpec Tests gibt es kein Problem und die SQL-Anweisungen werden angezeigt. Mit XUnit 1.x Ich denke, die SQL-Anweisungen wurden protokolliert.

Ich habe NHibernate über Eigenschaft konfiguriert show_sql

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

war es a change in XUnit 2, wie die Ausgabe erfasst wird, aber ich bin nicht sicher, wie dies zu kombinieren mit NHibernate die SQL-Anweisungen zu protokollieren.

So hat jemand eine Lösung für dieses? Ich versuche log4net Integration in meine Unittests zu vermeiden, nur um diese Aussagen zu protokollieren.

XUnit 2.1, NHibernate 4.0, ReSharper 2016.03.01, Visual Studio 2013

+0

Es könnte mit xUnit ist möglich, 'ITestOutputHelper' und Abfangjäger wie hier vorgeschlagen: http://stackoverflow.com/a/2874025/1162077 –

Antwort

1

Dank @ David Osborne's Kommentar ich eine EmptyInterceptor verwenden, um die SQL-Anweisungen von NHibernate zu erfassen und schreibt sie in die ITestOutputHelper bereitgestellt vom XUnit-Framework.

public class XUnitSqlCaptureInterceptor : EmptyInterceptor 
{ 
    public XUnitSqlCaptureInterceptor(ITestOutputHelper output) 
    { 
     this.Output = output; 
    } 

    public ITestOutputHelper Output { get; set; } 

    public override SqlString OnPrepareStatement(SqlString sql) 
    { 
     this.Output.WriteLine(sql.ToString()); 

     return sql; 
    } 
} 

Die Nutzung ist wie folgt:

[Fact] 
public void MyUnitTestWithSQL() 
{ 
    using (var session = factory.OpenSession(new XUnitSqlCaptureInterceptor(this.output))) 
    { 
     using (var transcation = session.BeginTransaction()) 
     { 

     } 
    } 
} 
Verwandte Themen