【发布时间】:2012-08-29 02:45:29
【问题描述】:
为什么Entity Framework中没有IDbContext接口?如果有一个现有接口,其中包含 SaveChanges() 等方法,您可以从中派生您的自定义数据库上下文接口,那么测试事情会不会更容易?
public interface ICustomDbContext : IDbContext
{
// add entity set properties to existing set of methods in IDbContext
IDbSet<SomeEntity> SomeEntities { get; }
}
【问题讨论】:
-
你仍然可以创建这样的接口并在你的派生上下文中实现它,但它真的会not be very helpful for unit testing。
-
是的,我只是好奇为什么一开始就没有这样的接口,开箱即用。不需要手动创建它。
-
您可以将 DbContext 包装在存储库中,因此可以模拟它。再次正如 Ladislav 指出的那样,您必须小心不要在存储库上公开任何可能受 linq to entity / linq to sql 影响的内容
-
@StevenMortimer 我相信上下文比存储库更接近工作单元。存储库更靠近 DbSet。
-
@Bruno,你是对的,但回购实现必须使用上下文。 “回购使用/拥有一个工作单元”没有意义。有意义的“工作单元使用/拥有一个或多个回购”。再一次,你是对的,一个上下文有一个或多个 DbSet。这警告我们,当围绕上下文构建 repo 并围绕已构建的 repos 构建工作单元时:我们正在做一些多余的事情,将设计模式嵌入到相同的设计模式中......为什么我们这样做?因为缺少原始实现的清晰接口:缺少 IDbRepository(那将是工作单元)
标签: entity-framework unit-testing testing mocking moq