我想为包含 linq to sql 代码的类编写单元测试。我的意思是在每个方法中我都创建了一个新的 DbContext 并完成了数据库作业。
我搜索了网络。首先我开始使用存储库和工作单元模式,但我发现 DbContext 本身就是一个工作单元,它的 dbset 作为存储库工作。另一点是我认为没有必要测试 Linq 部分,因为它可以正常工作(由 .net 团队测试)。我想测试我添加到代码中的逻辑。所以我决定用两个实现创建一个带有必要方法的接口,一个使用 linqToSql 而另一个只是一个模拟。像这样的东西:
public interface IDbManager
{
bool Insert(MyEntity newEntity);
}
public class RealDbManager:IDbManager
{
public bool Insert(MyEntity newEntity)
{
using (DbDataContext db = new DbDataContext())
{
db.MyEntities.InsertOnSubmit(newEntity);
db.SubmitChanges();
}
}
}
public class MockDbManager:IDbManager
{
public bool Insert(MyEntity newEntity)
{
return true;
}
}
整个想法正确吗?如果是这样,这是一个正确的实现吗?
是否可以将 DbDataContext 定义为类变量,而不是在每个方法中创建新实例?