2017-01-06 10 views
0

Я пытаюсь отобразить SQL-команды nhibernate из моих Xitn 2.x unittests в Resharper Output для тестовых сеансов модуля, но он регистрирует SQL-запросы ,Как захватить SQL-операторы NHibernate с resharper и xunit 2

С MSpec Tests нет никаких проблем, и будут показаны операторы 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, но я не знаю, как совместить это с NHibernate, чтобы войти в SQL заявления.

У кого-нибудь есть решение? Я пытаюсь избежать интеграции log4net в своих unittests только для регистрации этих операторов.

XUnit 2,1, NHibernate 4,0, ReSharper 2016.3.1, Visual Studio 2013

+0

Это может быть возможным с XUnit в 'ITestOutputHelper' и перехватчика, как предложено здесь: http://stackoverflow.com/a/2874025/1162077 –

ответ

1

Благодаря @David Osborne's комментарий Я использую EmptyInterceptor захватить операторы SQL из NHibernate и записать их в ITestOutputHelper предоставляемой инфраструктурой 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()) 
     { 

     } 
    } 
}