【发布时间】:2010-03-18 20:59:54
【问题描述】:
我有一个用于 Linq-to-Sql 的适配器类:
public interface IAdapter : IDisposable
{
Table<Data.User> Activities { get; }
}
Data.User是Linq-to-Sql定义的对象,指向持久化中的User表。
实现如下:
public class Adapter : IAdapter
{
private readonly SecretDataContext _context = new SecretDataContext();
public void Dispose()
{
_context.Dispose();
}
public Table<Data.User> Users
{
get { return _context.Users; }
}
}
这使得在单元测试中模拟持久层变得容易,因为我可以返回任何我想要的用户数据集合 (Rhino.Mocks):
Expect.Call(_adapter.Users).Return(users);
问题是我无法创建对象“用户”,因为无法访问构造函数并且类表是密封的。我尝试的一种选择是让 IAdapter 返回 IEnumerable 或 IQueryable,但问题是我无法访问 ITable 提供的方法(例如 InsertOnSubmit())。有没有办法在单元测试场景中创建假表,这样我就可以成为一名快乐的 TDD 开发人员?
【问题讨论】: