のためのハウツーユニット・テストモデル生成されたターゲットオブジェクトを見ると、ID = 0で作成されます。Name
が必要であることをどのようにテストできますか?Entity FrameworkのTDD、必要なフィールド
Name
フィールドが必要な場合は、Agent
オブジェクトを作成するにはどうすればよいですか?本当のIDはいつ割り当てられますか?モデル自体をテストするには、IDを割り当てるにはDbContext
を作成/モックアップする必要がありますか?
のためのハウツーユニット・テストモデル生成されたターゲットオブジェクトを見ると、ID = 0で作成されます。Name
が必要であることをどのようにテストできますか?Entity FrameworkのTDD、必要なフィールド
Name
フィールドが必要な場合は、Agent
オブジェクトを作成するにはどうすればよいですか?本当のIDはいつ割り当てられますか?モデル自体をテストするには、IDを割り当てるにはDbContext
を作成/モックアップする必要がありますか?
ここでPOCOクラスを扱っていることに注意してください。Agent
クラスの構築が失敗するという魔法はありません。カスタム属性をそのプロパティの1つに置いたからです。
エンティティフレームワークは、検証中およびデータマッピング中にカスタム属性をチェックしています。この場合、Required
属性をチェックし、対応する文字列プロパティがnullでなく、有効である場合にのみエンティティを宣言します。名前をデータベースのnull不可能な列にマップします。
Required
属性が飾られているすべてのプロパティが値を持っていることを確認し、このような何かを同じチェックを実行し、あなたのユニットテストのカスタム検証ルーチンを記述することができることをミラーに
[TestMethod()]
public void AgentWithNoNameIsInvalid()
{
Agent target = new Agent();
Assert.IsFalse(IsValid(target));
}
これはあなたのコードではなくEFをテストしているように感じます。
IDはプライマリキーなので、エンティティがデータベースにコミットされたときにのみ割り当てられます。だから完全なテストのためには、仕事の単位とあなたのためにこれを行う文脈を模擬しなければならないでしょう。多くの落とし穴があり、このアプローチを非常に脆弱にするIQueryable<T>
とIEnumerable<T>
の微妙な(そしてそれほど微妙ではない)違いがあります。
個人的には、既知のコンテンツを持つ別のテストデータベースに基づいてEFとの統合テストを行い、このテストデータベースに基づいて単体テストと期待される結果を書くことをお勧めします - これはTDDではないかもしれませんが、私が正しいことをテストしていることを確認する方法。
私は「一般的にPOCOクラスは単体テストではないのでしょうか?Intead、クラス自体ではなくデータ/エンティティをテストできますか? –
また、検証ルーチンのために、どのプロパティを '必須'思考コードとするか、 'IsRequired(Agent.Name)'のようなものをチェックする方法はありますか? –
@pstarリフレクションを使用することができます。後で時間がある場合は例を追加します。最初のコメントに同意します。クラス自体ではなくビジネスロジックを実行した後、POCOクラスの期待値をテストする必要があります。 – BrokenGlass