2012-01-20 5 views
1

NHibernateベースの(コンストラクタISessionFactory注入)汎用リポジトリの実装は、DALの内部に格納されています。 `Domain Layer 'に格納されているコントラクトを実装しています。リポジトリのユニットテスト。 NHibernate

私はSQl CEを使用して実際のリポジトリの動作をテストする必要がありますか、私はUnit of Work(ティムMacchartyの本http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470147563,descCd-authorInfo.htmlのように)とらわれないようなサポートするために、自分のアプリケーションをリファクタリングする必要があり、その後、IUnitOfWorkRepositoryの私の偽の実装を与えますか?

実際のリポジトリの実装を公開するローカルデータベースでテストを実行する有効なアプローチですか?

ありがとうございます!

+1

チェックayendesブログユニットテストnhibernate – blindmeis

+0

@blindmeisありがとう!それは素晴らしい記事です。 – lexeme

答えて

3

問題はあなたがテストしている理由とその理由です。それは質問に答えます。

場合:私はNHibernateのが動作している場合、あなたは(私がテスト の一種ではない)をテストされているサードパーティ製のツール

をテストしたい

。次に、必要な処理を行います。したがって、リファクタリングは不要です。あなた自身を失ってください。

私は私のコードは、その後、あなたは私が相互作用試験を呼び出すために好きなものについて話しているthridパーティのツール

と対話する方法をテストしたいです。リファクタリングは、あなたがHiberateをどのように使用するかに関心がある場合には、動作するよりも必要とされます。

は、私は自分のコードに完全

抽象NHibernateのをテストしたいです。必要なものは何でも...ラッパー?今あなたのユニットテストに戻ります。

私は、これはスコープの上にあなたの話だと思うビュー

のユーザポイントから自分のアプリケーションをテストしたいです。しかし、このスコープを使ってコンポーネントについて話すことができます。だから...うーん...価値があるが簡単ではない。単体テストではないので、コンポーネント/アプリケーションをインスタンス化し、その 'ユーザー'が行うように全体を実行する必要があります。私はこれらの「UAT」と呼び、通常は「コード化されたUAT」として実装します。

+0

リポジトリ内に検証ロジックが組み込まれていません。だから、コードとツールのやりとりをテストする必要があります。ありがとう! – lexeme

2

ユニットテストは、ユニットを単独でテストしています。そう、いいえ、あなたがデータベースに行くのであれば単体テストではありません。 抽象的なインタフェースを使ってリポジトリを離れてテストしてください。

1

実際のシナリオを使用するために必要なリポジトリをテストすると思います。そうしないと、データベースアクセスをテストするための他の場所がありません。リポジトリを嘲笑することは良い習慣ではありません。あなたはリポジトリでテストする必要のあるロジックを持っていないからです。実際のリポジトリを呼び出す統合テストを書く必要があると思います。

+0

テストするには、はい。ライブ・データベースに対して統合テストを実行する必要があります。しかし、この質問は単体テストであった。確かにデータベースを使用しているのは孤立してテストされていませんか? –

+0

リポジトリのメソッド呼び出しをテストする方法はありますか?なぜなら、リポジトリにはテストする必要がある論理はないと思うからです。 –

+1

これは本当に厳しいものです。多くの論理はありませんが、それは本当です。ただし、DBから読み書きするときに発生する処理と検証/検証があります。物事を解析し、あなたのすべてのオブジェクトを設定するだけでなく、 だから、あなたはユニットテストをしていません。しかし、あなたがセキュリティを望むなら、ベストプラクティスは妨害して擬似インタフェースでテストすることです。 –

関連する問題