如何以LINQ to SQL数据访问层的方式编写良好的单元测试?
目前我正在进行一些数据库测试,并需要创建访问数据库的助手方法,但我不希望这些方法出现在我的主要代码库中。
所以我有两个DAL的副本,一个在我的主项目中,另一个在测试项目中。如果我创建一个独立的数据层项目,管理这些东西会更容易吗?我不确定哪种方法更好。
如果我确实创建了一个数据层项目,那我是否也应该将所有的repo都移到那个项目中?我不确定如何正确设置层次结构。
谢谢
如何以LINQ to SQL数据访问层的方式编写良好的单元测试?
目前我正在进行一些数据库测试,并需要创建访问数据库的助手方法,但我不希望这些方法出现在我的主要代码库中。
所以我有两个DAL的副本,一个在我的主项目中,另一个在测试项目中。如果我创建一个独立的数据层项目,管理这些东西会更容易吗?我不确定哪种方法更好。
如果我确实创建了一个数据层项目,那我是否也应该将所有的repo都移到那个项目中?我不确定如何正确设置层次结构。
谢谢
我正在使用Linq2Sql作为我的数据访问层(DAL),并将其作为单独的项目。在我的领域项目中,我有一个存储库接口,然后我使用自定义的Linq2SqlCarRepository在我的DAL项目中实现它,这个类封装了生成的Linq2Sql类。
例如,在Car.Core项目中:
public interface ICarRepository
{
IQueryable<Car> GetAllCars();
void Add(Car);
}
public class SqlCarRepository : ICarRepository
{
private CarDataContext _context;
public SqlCarRepository()
{
_context = new CarDataContext();
}
#region ICarRepository Members
public IQueryable<Car> GetAllCars()
{
return _context.Cars;
}
接下来,我有一个测试项目Car.Data.Test,使用模拟对象模拟ICarRepository并进行测试。我认为这与您所描述的略有不同。但我认为您想尝试将DAL与应用程序分离,使其成为可以随意更换的外围设备。
我还没有完全整理好,但目前我有以下这些项目:
Car.Core --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests --- The tests of the core business logic.
Car.Web --- Asp.net MVC frontend
Car.Web.Tests --- Tests for the website
Car.Data --- The Linq2Sql stuff lives in here
Car.Data.Tests --- The tests for the DAL layer
这是目前我所拥有的,虽然可能不是现在最佳的做事方式。
我建议阅读The Onion Architecture并观看MVC商店前端视频以获取灵感;祝你好运。