Dav*_*all 8 c# mocking xunit.net ravendb fakeiteasy
我正在尝试编写存储库实现的单元测试.存储库使用RavenDB作为数据库.对于单元测试,我想模拟RavenDB部分.为了创造模拟(假货),我正在使用FakeItEasy.我认为由于RavenDB API是通过接口访问的,因此模拟/伪装不会有任何问题.
但是,在尝试实例化特定模拟时,我确实遇到了问题.我的单元测试代码的相关部分如下所示:
[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);
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
在实例化IRavenQueryable假的时候,我得到了一个异常.这是来自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)
Run Code Online (Sandbox Code Playgroud)
"找不到默认构造函数"没有任何意义,因为我想要伪造的是一个接口.有没有人建议问题可能是什么?
你是正确的,因为异常消息没有任何意义,这是一个错误.如果您能提供一个VS-solution来重现该bug并在此处提出问题,那就太棒了:https://github.com/patrik-hagne/FakeItEasy/
错误在于使用了错误的异常消息,但是必定存在错误导致虚假创建出错."UserDocument"类型是公共的吗?如果它是内部的并且您已通过使用InternalsVisibleToAttribute给予测试项目访问权限,那么您还必须让代理生成库访问它:https://github.com/FakeItEasy/FakeItEasy/wiki/How-to -fake-internal-(Friend-in-VB)-types.