2

我正在使用 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 to nhibernate 语句,如何检查真正转换的 sql 查询?有什么方法吗?

我知道我可以使用 SQL 探查器,但是我想在测试用例中使用 Mock 对象,所以我不想在任何与数据库相关的方法中看到它。

4

3 回答 3

2

您可以使用 NHibernate Profiler 来执行此操作,有关如何设置编程集成的详细信息,请参阅此帖子:http: //ayende.com/Blog/archive/2009/12/13/uumlberprof-new-feature-programmatic-integration。 aspx

另一个稍微复杂一点的选项是监听 NHibernate.SQL 记录器并处理其结果。它为您提供信息,但您需要进行一些解析,并且不会为您提供会话信息

于 2009-12-24T05:46:06.633 回答
1

好问题。

我认为断言生成的 SQL 的最佳方法是使用IInterceptor并挂钩到OnPrepareStatement

或者,如果您可以在调试期间仅在“输出”窗口中看到 SQL 语句,则可以启用show_sql选项。

于 2009-12-14T03:18:28.907 回答
0

你试过NIBerate Profiler吗?它应该是你正在寻找的东西。

于 2009-12-14T03:07:25.160 回答