Tôi đang cố viết một bài kiểm tra đơn vị triển khai kho lưu trữ. Kho lưu trữ sử dụng RavenDB làm cơ sở dữ liệu. Đối với các bài kiểm tra đơn vị, tôi muốn giả lập các phần RavenDB. Để tạo ra các mocks (giả) tôi đang sử dụng FakeItEasy. Tôi đã tìm ra sẽ không có vấn đề gì với việc giả mạo/giả mạo kể từ khi API RavenDB được truy cập thông qua các giao diện.Giả mạo/mô phỏng giao diện cho lỗi "không có hàm tạo mặc định", làm cách nào có thể?
Tuy nhiên, tôi gặp sự cố khi cố gắng tạo mô hình cụ thể. Các bộ phận có liên quan của mã kiểm tra đơn vị của tôi trông như thế này:
[Fact]
public void Test() {
UserDocument doc = ...;
IQueryable<UserDocument> where = A.Fake<IQueryable<UserDocument>>();
A.CallTo(() => where.First()).Returns(doc);
IRavenQueryable<UserDocument> query = A.Fake<IRavenQueryable<UserDocument>>();
IDocumentSession session = A.Fake<IDocumentSession>();
A.CallTo(() => session.Query<UserDocument>()).Returns(query);
IDocumentStore store = A.Fake<IDocumentStore>();
A.CallTo(() => store.OpenSession()).Returns(session);
.
.
.
}
Khi instantiating giả IRavenQueryable tôi nhận được một ngoại lệ. Đây là nhật ký từ nhân vật Xunit.net:
UnitTest.Test : FakeItEasy.Core.FakeCreationException :
Failed to create fake of type "System.Linq.IQueryable`1[UserDocument]".
Below is a list of reasons for failure per attempted constructor:
No constructor arguments failed:
No default constructor was found on the type System.Linq.IQueryable`1[UserDocument].
Stack Trace:
vid FakeItEasy.Core.DefaultExceptionThrower.ThrowFailedToGenerateProxyWithResolvedConstructors(Type typeOfFake, String reasonForFailureOfUnspecifiedConstructor, IEnumerable`1 resolvedConstructors)
vid FakeItEasy.Creation.FakeObjectCreator.TryCreateFakeWithDummyArgumentsForConstructor(Type typeOfFake, FakeOptions fakeOptions, IDummyValueCreationSession session, String failReasonForDefaultConstructor, Boolean throwOnFailure)
vid FakeItEasy.Creation.FakeObjectCreator.CreateFake(Type typeOfFake, FakeOptions fakeOptions, IDummyValueCreationSession session, Boolean throwOnFailure)
vid FakeItEasy.Creation.DefaultFakeAndDummyManager.CreateFake(Type typeOfFake, FakeOptions options)
vid FakeItEasy.Creation.DefaultFakeCreatorFacade.CreateFake[T](Action`1 options)
"Không tìm thấy hàm tạo mặc định" không có ý nghĩa vì những gì tôi đang cố gắng giả là giao diện. Có ai có một gợi ý những gì vấn đề có thể được?
Tôi vừa nhận thấy rằng thông báo ngoại lệ của bạn đề cập đến ** "System.Linq.IQueryable \' 1 [UserDocument] "**, không cụ thể là" IRavenQueryable '. Bạn có chắc chắn ngoại lệ không xảy ra khi bạn khởi tạo 'IQueryable '? –
Rob
Vâng, tôi chắc chắn. Tuy nhiên, IRavenQueryable mở rộng giao diện IQueryable vì vậy tôi đoán FakeItEasy không thành công khi cố gắng giả mạo phần IQueryable nếu IRavenQueryable ... hoặc một cái gì đó tương tự. –
Loại công khai của UserDocument có phải là công khai không? –