質問

さまざまな種類のデータと話すことを目的としたリポジトリクラスがいくつかあります。 IRepository インターフェース。

実装では、コードはデータソースに説明します。これは、XMLファイルまたはデータベースのディレクトリ、または単なるキャッシュです。これらの実装のいずれかを確実に単位テストすることは可能ですか?モックの実装は機能していません。なぜなら、実際のコードではなく、模擬コードのみをテストしているからです。

役に立ちましたか?

解決

いいえ、クラスを書いていたときに模擬を使用します。 使用します an IRepository. 。のために 実装IRepository, 、適切なデータソースに対してテストする必要があります。データベースの場合、それは少し苦痛です - ファイルシステムの場合、わずかに少ないです。

可能であれば、ストリームや読者の観点から実装を表現できれば、あなたはあなたの生活を楽にします。実装の部分のテストは、メモリ内のデータソース、またはテストアセンブリのリソースからのストリームに反する可能性があります。もちろん、おそらく必要です いくつか 実際のデータベースまたはファイルシステムに移動するテストですが、できれば少なくなります。

そのようなテストを「ユニット」テストと呼ぶかどうかは、単体テストをどのように定義するかの問題です。個人的に私は関係する名前についてあまり気にしませんが、私は 行う テストを受けることに気をつけてください。特にデータベースの場合、これらはやや痛みを伴う可能性があります(特に、並行してテストを実行したい場合) - しかし、私の経験では非常に貴重な場合もあります。

他のヒント

実際にデータを維持または照会するコードをテストしている場合、おそらく実際にデータベースを押したいと思うでしょう。

これらは、単体テストではなく統合テストです。

データの状態を知っているテストデータベースを設定し、これに対してテストを実行できます。また、テストには単体テストとは異なり、すべてのチェックインで実行する必要がないことをテストに伝えたいと思うでしょう(ヌニットでは、実行しないように属性を飾るテストクラスを飾ることができます)

大まかに言えば、あなたはそうしません 単位 データソースと通信することが唯一の目的であるコードをテストします。リポジトリを自動的にテストすることをお勧めしますが、そのようなテストは定義により統合テストになります。たとえば、「ファーストパス」ビルドの一部として、これらのテストを実行したくないのは、例えばデータベースのセットアップとクリーンアップが有意でない時間がかかる場合があります。

リポジトリに他の責任がある場合(たとえば、作業パターンの単位の実装)、それらを個別にユニットテストすることをお勧めします。

IREPositoryの実装のある時点で、データベース/ファイル/XMLに賛成/書き込み/書き込みを実際に読み書きするサードパーティAPIを使用します。あなたがしたいのは、それらのAPIをock笑して、コードが正しい順序で正しいAPIを呼び出すことを確認することです。

したがって、データベースから読んでいる場合は、SQLConnectionとSQLCommandを模倣して、それらのクラスの適切な方法を呼び出すことを確認できます。ストリームに書いている場合は、ストリームをock笑して、それを洗い流して処分することを確認できます(たとえば)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top