1
我正在尝试为我的测试类找到一个初始化模拟存储库的通用方法。由于我有多个知识库,我试着用泛型来做。我有一个通用的仓库接口:有没有更好的方法来初始化使用泛型的模拟库?
public interface IRepository<T> where T: class
{
IQueryable<T> GetAll();
}
我的静态初始化方法是这样的:
public static Mock<T> GetRepository<T, TK>(params TK[] items) where T: class, IRepository<TK> where TK: class
{
Mock<T> mock = new Mock<T>();
mock.Setup(m => m.GetAll()).Returns(items.ToList().AsQueryable);
return mock;
}
要初始化我的存储库中的代码,我使用:
Mock<IRepository<Link>> linkRepository = UnitTestHelpers.GetRepository<IRepository<Link>, Link>(new[] {
new Link { LinkId = 1, Title = "Title 1", Created = DateTime.Now, Url = "http://google.com" },
new Link { LinkId = 1, Title = "Title 2", Created = DateTime.Now, Url = "http://google.com" },
new Link { LinkId = 1, Title = "Title 3", Created = DateTime.Now, Url = "http://google.com" }
});
我觉得这是不这是最好的方法,因为我必须在GetRepository方法中指定两次链接。有没有更好的/更清洁的方式来做到这一点?
感谢您的帮助。明天我会试试这个。也欣赏关于可重复测试的建议。 – b3n 2011-02-21 10:00:02