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プロファイラーを使用できることはわかっていますが、テストケースでモックオブジェクトを使用したいので、データベース関連のメソッドで表示したくありません。

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

NHiberate Profilerを試しましたか?それはあなたが探しているものでなければなりません。

于 2009-12-14T03:07:25.160 に答える