私は個々の認証を持つASP.NET MVC Webアプリケーションを使って、ユーザーの車に関する詳細を保存しています。私はエンティティフレームワークを嘲笑してWebアプリケーションを単体テストする必要があります。したがって、ApplicationDbContext
クラスのインターフェイスを実装する必要があります。IdentityDbContextを使用してEntity Frameworkをモックする方法は?
これは私のエンティティフレームワークを使用した最初の試みで、ユニットテスト時にApplicationDbContext
クラスとインターフェイスがフレームワークを模擬するのに適しているかどうかをチェックしたかったのですか?
public interface IApplicationDbContext : IDisposable
{
IDbSet<ApplicationUser> Users { get; set; }
DbSet<CarModel> Cars { get; set; }
int SaveChanges();
void MarkAsModified(CarModel car);
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext
{
public ApplicationDbContext()
: base("ApplicationDb", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<CarModel> Cars { get; set; }
public override IDbSet<ApplicationUser> Users { get; set; }
public void MarkAsModified(CarModel car)
{
Entry(car).State = EntityState.Modified;
}
}
いくつかのクラスは、Visual Studiosのクイックアクションを使用して自動修正によって形成されました。 モデルにIDbSet
が必要な理由は誰でも説明できますが、CarModels
にはちょうどDbSet
が必要で、クラスのUsers
にはオーバーライドが必要な理由は何ですか?
あなたのDbContextプロパティは、あなたがそれらを嘲笑しようとするならば、おそらくpublic virtualであるべきです。 – CalC