C# 如何使用resharper和xunit 2捕获NHibernate的SQL语句
我试图在单元测试会话的Resharper输出中显示来自XUnit 2.x单元测试的nhibernate的sql语句,但它会记录sql语句 使用MSpec测试时不会出现问题,并且会显示sql语句。使用xUnit1.x我想sql语句也会被记录下来 我已通过属性C# 如何使用resharper和xunit 2捕获NHibernate的SQL语句,c#,unit-testing,nhibernate,resharper,xunit,C#,Unit Testing,Nhibernate,Resharper,Xunit,我试图在单元测试会话的Resharper输出中显示来自XUnit 2.x单元测试的nhibernate的sql语句,但它会记录sql语句 使用MSpec测试时不会出现问题,并且会显示sql语句。使用xUnit1.x我想sql语句也会被记录下来 我已通过属性show\u sql <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <prop
show\u sql
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
真的
XUnit2中有捕获输出的方法,但我不确定如何将其与NHibernate结合起来记录sql语句
有没有人能解决这个问题?我试图在我的单元测试中避免log4net集成,只是为了记录这些语句
XUnit 2.1,
NHibernate 4.0,
ReSharper 2016.3.1,
Visual Studio 2013感谢@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())
{
}
}
}
使用xUnit的
ITestOutputHelper
和此处建议的拦截器可能是可行的:从哪里到工厂?以及this.output?