如何使用resharper和xunit 2捕获NHibernate的SQL语句

时间:2017-01-06 06:20:39

标签: c# unit-testing nhibernate resharper xunit

我试图在单元测试会话的Resharper输出中从我的XUnit 2.x单元测试中显示nhibernate的sql语句,但它确实记录了sql语句。

使用 MSpec测试时没有问题,并显示sql语句。使用 XUnit 1.x ,我认为还记录了sql语句。

我已经通过属性show_sql

配置了NHibernate
<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集成来记录这些语句。

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

1 个答案:

答案 0 :(得分:1)

感谢@David Osborne的评论,我使用EmptyInterceptor来捕获NHibernate的SQL语句,并将它们写入XUnit框架提供的ITestOutputHelper

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())
        {

        }
    }
}