Я пытаюсь найти общий способ инициализации фиктивного репозитория для моего тестового класса. Поскольку у меня есть несколько репозиториев, я попытался сделать это с помощью дженериков. У меня есть общий интерфейс хранилища:
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" }
});
Я чувствую, что это не самый элегантный способ сделать это, поскольку мне нужно дважды указать Link в методе GetRepository. Есть ли более приятный / чистый способ сделать это?