2017-01-06 3 views
0

ユニットテストセッションのResharper出力でXUnit 2.xのunittestsからnhibernateのSQLステートメントを表示しようとしていますが、SQLステートメントを記録しています。resharperとxunitでNHibernateのSQLステートメントをキャプチャする方法2

MSpecテスト問題はなく、SQL文が表示されます。 XUnit 1.x私はSQL文も記録されたと思います。

私はプロパティを経由してNHibernateのを設定しているshow_sql

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

ありxUnitの出力をキャプチャする方法を2でa changeでしたが、SQL文をログに記録するNHibernateのでこれを組み合わせることは、どのように私がわかりません。

だから誰にでもこの解決策がありますか?私はこれらのステートメントを記録するためだけに私のunittestsでlog4netの統合を避けようとしています。

のxUnit 2.1、 NHibernateは4.0、 ReSharperの2016年3月1日、 のVisual Studio 2013

+0

ここで提案としてそれはxUnitフレームの 'ITestOutputHelper'とインターセプタで可能であるかもしれない:http://stackoverflow.com/a/2874025/1162077 –

答えて

1

@デビッドOsborne'sのおかげで、私はNHibernateはのSQLステートメントをキャプチャし、ITestOutputHelperに書き込むためにEmptyInterceptorを使用コメントXUnitフレームワークによって提供されます。次のように

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; 
    } 
} 

使用量は次のとおりです。

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

     } 
    } 
} 
関連する問題