2016-07-14 6 views
1

これらのコンポーネントコンストラクタは、名前付きクエリを実行しているサーバ側コンポーネントのユニットテストを実行したいと思います。ユニットテストのために "IsClient = false" EntityManagerを取得する

私たちの単体テストフレームワークはNUnitに基づいており、2層展開をシミュレートするために非分散モードでテストを実行しています。残念ながら、単体テスト・コードからEntityManagerを作成すると、常に「クライアント」マネージャーが生成されますが、サーバー・バージョン(つまり、サーバー・メソッドと同じもの)が必要になります。クライアントバージョンを取得すると、モデルのセキュリティ制約のために、テスト対象のコード内のいくつかの名前付きクエリが拒否されます。

EntityManagerを取得し、ユニットテスト側で何らかの方法でサーバの動作をシミュレートする良い方法はありますか?私がこれまでに得たベストは専用のサーバーメソッドを呼び出し、EntityServerをグローバル変数のどこかに格納し、ユニットテストから使用することでした。

よろしく

答えて

2

あなたが見つけてきたように、DFは特にユニットテストフレンドリーではありません、あなたが使用しているアプローチが良い回避策です。

DevForce IEntityLoginManager、EntityServerQueryInterceptorsなどのコンポーネントは、実際の展開に関係なく、常に(見つかった場合)呼び出されます。したがって、2層ユニットテストを実行している場合でも、 DFはメモリ内のEntityServerを起動し、EntityManagerからの要求を満たすためにサーバ側のコンポーネントを探します。

ClientCanQueryの権限チェックで問題が発生している場合は、デフォルトのEntityServerQueryInterceptor認可ロジックが開始されていることを意味します。DevForceの「コンポジションコンテキスト」機能を使用してテスト用のカスタムインターセプタを実装できます。カスタム・テスト・インターセプターを使用すると、デフォルトの許可ロジックをオーバーライドして、これらの照会を実行することができます。 hereというテストでのコンポジションコンテキストの使用に関する情報があります。

"unit"テストの意味を拡張したい場合や、サーバー側コンポーネントが呼び出されても問題ない場合は、探している特定のサーバー側ロジックをトリガーする単純なクライアント側ユニットテストを記述できますテスト。 たとえば、クライアント上で呼び出された単純な名前付きクエリは、名前付きクエリプロバイダおよび/またはクエリインターセプタの特定のロジックを実行し、その結果を検証できます。

関連する問題