Mock DbSet SetupData конфигурации путаницы - PullRequest
0 голосов
/ 24 апреля 2018

Я использую библиотеку EntityFramework.Testing.Moq для модульного тестирования моих репозиториев, но я столкнулся с некоторой путаницей и нигде не могу найти документацию. В приведенном ниже примере кода я использую метод SetupData из ранее упомянутой библиотеки, чтобы создать фиктивный DbSet, который можно использовать как настоящий, но просто записывать данные в память вместо базы данных.

Метод принимает 2 параметра, первый из которых представляет собой любые данные, которые вы хотите предварительно загрузить в DbSet, а второй - функцию предиката, представляющую метод Find для DbSet. Для таблиц с одним ключом я все заработал, используя приведенный ниже код, хотя я не совсем понимаю, что происходит с объектами в функции предиката Find. Моя проблема сейчас в том, что у меня есть другая таблица с составным ключом, поэтому я не знаю, как настроить функцию предиката для учета составного ключа. Любая помощь очень ценится.

var mockUserOrganizationRoleData = new List<UserOrganizationRole>();
UserOrganizationRoleDbSetMock = new Mock<DbSet<UserOrganizationRole>>()
    .SetupData(mockUserOrganizationRoleData, objects => mockUserOrganizationRoleData.SingleOrDefault(d => d.UserOrganizationRoleId == (int)objects.First()));

1 Ответ

0 голосов
/ 24 апреля 2018

Я нашел способ заставить его работать, но это какая-то чёрная магия, потому что я абсолютно не понимаю, что на самом деле здесь происходит или как это работает.Не стесняйтесь объяснять, если кто-то понимает больше, чем я, но это, по крайней мере, делает то, что я хочу.

var mockUserSystemPreferenceData = new List<UserSystemPreference>();
UserSystemPreferenceDbSetMock = new Mock<DbSet<UserSystemPreference>>()
    .SetupData(mockUserSystemPreferenceData, objects => mockUserSystemPreferenceData.SingleOrDefault(d => d.SystemPreferenceId == (int)objects.First() && d.UserId == (Guid)objects.First()));
...