Мне кажется, что вместо того, чтобы удалять зависимость от EF через шаблон Repository, вы пытаетесь высмеивать специфическое поведение EF. Я не вижу смысла в попытках сделать это, и это будет очень сложно, EF не предназначен для насмешек.
Ваш репозиторий предположительно выглядит примерно так:
public interface IRepository
{
IEnumerable<EmployeeProfiles> EmployeeProfiles { get; }
}
public class Repository
{
public IEnumerable<EmployeeProfiles> EmployeeProfiles
{
get
{
// Get all the entities including children
using (MyContext context = new MyContext())
{
return context.EmployeeProfiles.Include("EmployeeProperties").ToList();
}
}
}
}
Таким образом, вы удалили зависимость хранилища от способа возврата EmployeeProfiles. Теперь вы можете макетировать содержимое вашего сердца (еще не использовали родинки), но с Moq вы бы сделали что-то вроде:
public void TestEmptyList()
{
var mock = new Mock<IRepository>();
var expected = new List<EmployeeProfiles>();
mock.SetupGet(ep => ep.EmployeeProfiles).Returns(expected);
var actual = mock.Object.EmployeeProfiles;
Assert.AreEqual(expected, actual);
}
Итак, если вы поместите методы / свойства, которые вы хотите абстрагировать от базы данных, в интерфейс репозитория, то вы можете смоделировать любые значения, которые вы хотите проверить, чтобы они могли возвращаться.
Может быть, вы делаете это в любом случае, я не уверен. Я не понимаю, почему вы хотите провести модульное тестирование EF, что бы вы надеялись получить? Это было бы очень сложно, оно не предназначено для насмешек (очень мало интерфейсов / виртуалов). Любое копирование данных, которые вы возвращаете, и это действительно все, что вам действительно интересно, будет сделано, как указано выше.