2012-01-10 6 views
0

をテストします。 Courseエンティティ自体は、ユーザーがアクセスできるかどうかを決定するロジックを提供します。これはうまくいきますが、コントローラーをテストする方法という問題につながります。コントローラのための具体的なPOCOのビジネスロジックをモックすることは、私は、次のコントローラを持っているとしましょう

私のコントローラテストでは、course.userCanAccess()が特定の結果を返すようにする方法が必要です。私のエンティティPOCOにはインターフェイスがないので、私はそれらを嘲笑することはできません(これが間違っている場合は私を修正してください)。

私は、userHasAccess()が私が望むものを返すように設定されたテスト用の完全なCouseオブジェクトを作成することができますが、メソッドは「水和」されたコースの特定の関連エンティティに依存し、ワイヤーアップする雑用。

私はテストに慣れていないので、続行方法が不明です。

答えて

2

仮想としてマークする方法があれば、それらをモックすることができます。

0

POCOsにはビジネスロジックを含めることはできません。それらは "Plain Old CLR Objects"です。

ビジネスロジックは、コントローラにインジェクションできるサービスレイヤーにある必要があります。

あなたPOCOsに余分なプロパティを追加する必要がある場合は、それが([NotMapped]としてマーク)大丈夫だ、またはあなたが(とすべきである)Darin Dimitrovはおそらくあなたを教えてくれるものですViewModelsを、使用することができます!

あなたはPOCOsがインターフェイスを必要とすべきではないと考えています。実際には、POCOsのインターフェイスは、EntityFrameworkのナビゲーションプロパティを使用することはほとんど不可能ですが(実際には不可能ではありませんが、私はそれをやったことはありませんが、非常に虚偽の方法で行っています)。

私はもっと後で答えることができますが、今すぐ私は妻と子供に家に帰る必要があります!

+0

コースはPOCOではないと私は同意しますが、ビジネスロジックは常にサービスレイヤに属している必要があります。ドメイン層でサービスパターンを使用することも、エンティティにメソッドを直接配置することもできます。エンティティにメソッドを追加すると、たとえClrオブジェクトがPlain Oldよりも多くなっても、ドメインモデルが充実します。 – danludwig

+1

フェアポイント。私は、定義上、POCOにビジネスロジックを含めることはできないと言っていました。あなたは好きな場所にビジネスロジックを置くことは許されていますが、それがPOCOになったらPOCOでなくなります。 :-) –

+0

私は、POCOという用語は、それがCLR以外の技術やフレームワークに結びついていない単なるクラスであることを意味すると思います。ドメイン層クラスはしばしばPOCOであり、ViewModelは通常はPOCOです。 ViewModelsにビジネスロジック(合意)はないはずですが、DDDに従っている場合は、ドメインレイヤークラスにビジネスロジックが必要です。 – drogon

関連する問題