мне было интересно, если кто-нибудь был подобный пример этого post для FakeItEasy (оригинальный пост here Я пытался найти правильную установку, но не мог получить это право я.. не смог найти никаких примеров в Интернете. Я начинаю преподавать модульное тестирование, и я решил использовать FakeItEasy. Все мои проекты до сих пор используют инфраструктуру сущности и не используют шаблон Repository/UOW, поскольку я считаю DbSet и DbContext достаточно хорошим для моего я понимаю, что есть плюсы и минусы с EF и модульным тестированием, но я все равно хотел бы это понять. Я уверен, что ушел с моей попытки (см. ниже), так как ошибка, которую я получаю, равнаFakeItEasy DbSet/IQueryable <T> - Entity Framework 6
System.NotImplementedException: член IQueryable.Provider имеет не был реализован в типе 'DbSet
1Proxy' which inherits from 'DbSet
1'. Тестовые двойники для «DbSet`1» должны обеспечивать реализацию применяемых методов и свойств .
Любое направление будет очень полезно. Спасибо.
var data = new List<Request>
{
request1,
request2,
request3
}.AsQueryable();
var fakeDbSet = A.Fake<DbSet<Request>>();
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Provider).Returns(data.Provider);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Expression).Returns(data.Expression);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).ElementType).Returns(data.ElementType);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).GetEnumerator()).Returns(data.GetEnumerator());
var fakeContext = A.Fake<RequestPortalContext>();
A.CallTo(() => fakeContext.Requests).Returns(fakeDbSet);
var service = new RequestReadService(fakeContext);
var requests = service.GetAllRequests();
Assert.AreEqual(3, requests.Count);
Assert.AreEqual("Test1", requests[0].Name);
Assert.AreEqual("Test2", requests[1].Name);
Assert.AreEqual("Test3", requests[2].Name);
(Добавление интерфейса сработало.) –
Еще раз спасибо за помощь! –