.NET 4.5, EF6에서 작업 중이며 JustMock 2.0을 사용하여 테스트 중입니다. 응용 프로그램JustMock - 다른 클래스의 동일한 메소드 결과를 반환하여 모든 인스턴스에 대한 메소드 모의 방법 (공용 인터페이스 공유)
내가 조롱에 의해 내 데이터베이스를 조롱하려고 내 DbContext 서브 클래스 :.. CoreDataRepositoryContext
을 위해, 나는 회원에게 SaveChanges를의 DbContext 모든 DbSet을 조롱 할 필요가 가짜 데이터 컬렉션을 반환하여 내 클래스 CoreDataRepositoryContext의 입력 된 속성.
- 내가 의 모든 인스턴스 CoreDataRepositoryContext 및 DbSet을 조롱 할 필요가
- AsQueryable
를 제거
예를 들어, 나는 en 유형 이다 DbSet < 주문> 및 FakeOrders
// FakeOrders is a list of orders (List<Order>)
var mockedContext = Mock.Create<CoreDataRepositoryContext>();
// Mock works
Mock.Arrange(() => mockedContext.SaveChanges()).IgnoreInstance().DoNothing();
// Mock works
Mock.Arrange(() => mockedContext.Orders).IgnoreInstance().ReturnsCollection(FakeOrders);
// Mock works
Mock.Arrange(() => mockedContext.Orders.Add(Arg.IsAny<Order>())).IgnoreInstance().DoInstead((Order o) => FakeOrders.Add(o));
// Mock works
Mock.Arrange(() => mockedContext.Orders.Remove(Arg.IsAny<Order>())).IgnoreInstance().DoInstead((Order o) => FakeOrders.Remove(o));
// Mock DOES NOT work !
Mock.Arrange(() => mockedContext.Orders.AsQueryable()).IgnoreInstance().Returns(() => FakeOrders.AsQueryable());
mockedContext.Orders : 데이터베이스에 입력 주문의 tities (표 주문) 이 나는 테이블을 주문을 조롱하기 위해 다음과 같은했다 유형이 이고 목록이 <입니다.입니다. 두 클래스 모두 IEnumerable < 순서> 인터페이스를 구현합니다. 두 가지 방법 중 어느 것도 인터페이스 IEnumerable을 < T>에 선언되어 있기 때문에 가 및 이 구성원을 제거 추가 도발
는 잘 작동합니다. 한편
, AsQueryable이 인터페이스 선언 Queryable에서 의해 정의된다. 내가 는 IEnumerable < T>를 구현하는 모든 클래스의 인스턴스에서 AsQueryable를 호출 IgnoreInstance를 사용하여 회원을 조롱 그래서, 끝없는 루프를 시작합니다. 를 IEnumerable < 주문> .AsQueryable이 FakeOrders.AsQueryable에 의해 조롱 때문에 내가 할 수있는 방법 ... FakeOrders.AsQueryable ... 무한 루프에 의해var query = mockedContext.Orders.AsQueryable(); // Infinite loop
query = FakeOrders.AsQueryable(); // Infinite loop
query = new List<Order>().AsQueryable(); // Infinite loop
을 조롱하는 모의 제품 만 DbSet <>.AsQueryable 구체적으로 조롱하지 않고 IEnumerable < 주문> .AsQueryable을 사용합니다. IgnoreInstance?
당신의 도움이 :) 당신은 단지 마지막 배열에서 IgnoreInstance()
을 제거 할 수 있습니다
[JustMock.EntityFramework] (http://www.nuget.org/packages/JustMock.EntityFramework/)로 많은 일을 할 수 있습니다. –