我正在使用Linq来NHibernate。
我有以下测试用例:
[TestMethod]
[DeploymentItem("hibernate.cfg.xml")]
public void Category_Should_GetAllByLinq()
{
// Arrange
IRepository<Category> repo = new CategoryRepository();
//Act
IList<Category> list = repo.GetListByLinq();
//Assert
Assert.IsTrue(list.Count > 0);
}
我还在CategoryRepository类中有以下代码:
public IList<Category> GetListByLinq()
{
ISession session = NHibernateHelper.OpenSession();
// When following statement is executed, How to check converted real sql query?
var query = from c in session.Linq<Category>()
select c;
return query.ToList();
}
我的问题是,一旦linq执行nhibernate语句,如何检查实际转换的sql查询?任何方法?
我知道我可以使用SQL分析器,但是我想在测试用例中使用Mock对象,所以我不想在任何与数据库相关的方法中看到它。
答案 0 :(得分:2)
您可以使用NHibernate Profiler执行此操作,有关如何设置编程集成的详细信息,请参阅此帖子: http://ayende.com/Blog/archive/2009/12/13/uumlberprof-new-feature-programmatic-integration.aspx
另一个选项,稍微复杂一点,就是收听NHibernate.SQL记录器并处理其结果。它为您提供了信息,但您需要进行一些解析,它不会为您提供会话信息
答案 1 :(得分:1)
好问题。
我认为断言生成SQL的最佳方法是使用IInterceptor并挂钩OnPrepareStatement。
或者,如果您在调试期间只在“输出”窗口中看到SQL语句,则可以启用show_sql选项。
答案 2 :(得分:0)
你试过NHiberate Profiler吗?它应该是你正在寻找的。