EffortとTypeName属性によるテスト

c# dbcontext effort entity-framework unit-testing

質問

私はいくつかのコードをテストしたいと思います。これを達成するために、DAL( Entity Framework 6 - Code first )で定義されたDbContextを偽造する必要があります。これはほとんどうまくいっていますが、データモデルクラスがTypeName属性を使用しているときに問題にぶつかりました。私はこの問題を示すためにスケルトンを作った。

データモデル:

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

コンテキスト定義

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

そして、いくつかのデータを使って偽のコンテキストを生成するためのダミーのメソッド:

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

問題はTypeName属性です。それがコメントアウトされると、テストは合格になります。しかし、有効になっている場合は、 System.InvalidOperationExceptionスローされ、

シーケンスに一致する要素が含まれていません

それを要約すると、私の質問は:

  • データモデルクラスに属性があっても、テストでEffortを使用できる方法がありますか
  • そうでない場合は、偽のDbContextを作成するにはどのような代替メソッドを使用しますか?

受け入れられた回答

私はEntityTypeConfigurationsを見てそこにあなたのマッピングを移動することをお勧めします: http : //www.entityframeworktutorial.net/code-first/entitytypeconfiguration-class.aspx

これにより、使用している現在のDBを考慮せず、Entity Frameworkを考慮せずにエンティティ/インターフェイスを使用してエンティティ/インターフェイスをテストすることができます。

また、ユニットテストの代わりに統合テストを行っていることもわかります。ユニットテストを行うには、実際のDbContextの使用を取り除く必要があります(現在の実装では、DAL用の具体的なEF実装を使用していますが、代わりにいくつかの抽象化を使用する必要があります)。

私は少なくともあなたのDbContextをインタフェースでラップして、それをモックすることができる/より良い方法でスタブすることを推奨します:

public interface IDbContext {
      IDbSet<Customer> Customers { get; set; }
}



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ