当前位置: 首页 > 编程语言 > C#

使用MOQ同步方法测试EF异步方法分享

时间:2023-04-10 16:01:02 C#

使用MOQ同步方法测试EF异步方法我有这个方法:publicasyncTaskDeleteUserAsync(GuiduserId){using(varcontext=this.contextFactory.Create()){varuser=awaitcontext.Users.FirstOrDefaultAsync(x=>x.Id.Equals(userId));if(user==null){thrownewException("用户不存在");}context.Users.Remove(用户);等待context.SaveChangesAsync();}}我想测试一下。所以我创建了测试:[TestMethod]publicasyncTaskDeleteUsersSuccessfulCallTest(){//Arrangevarid=Guid.NewGuid();varuser=newUser(){Id=id};varcontext=newMock();varusersDbSet=DbSetQueryMocking.GenericSetupAsyncQueryableMockInterfaceSet(newList{user}.AsQueryable());context.Setup(x=>x.Users).Returns(usersDbSet.Object);context.Setup(x=>x.Users.Remove(user)).Returns(user).Verifiable();context.Setup(x=>x.SaveChangesAsync()).ReturnsAsync(1).Verifiable();this.contextFactory.Setup(x=>x.Create()).Returns(context.Object);//执行awaitthis.userService.DeleteUserAsync(id);context.VerifyAll();我有这个方法来创建一个模拟集:publicstaticMockGenericSetupAsyncQueryableMockSet(IQueryabledata)whereT:class{varmockSet=newMock();mockSet.As().Setup(m=>m.GetAsyncEnumerator()).Returns(newTestDbAsyncEnumerator(data.GetEnumerator()));mockSet.As<可查询>;().Setup(m=>m.Provider).Returns(newTestDbAsyncQueryProvider(data.Provider));mockSet.As().Setup(m=>m.Expression).Returns(data.Expression);mockSet.As().Setup(m=>m.ElementType).Returns(data.ElementType);mockSet.As().Setup(m=>m.GetEnumerator()).Returns(data.GetEnumerator());返回模拟集;但是,因为我的DeleteUserAsync包含一个异步扩展方法和一个标准同步方法,所以我收到以下错误消息:操作。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=287068。显然,如果我只是设置DbSet并使用QueryableDbSet,那么它将抛出相同的异常。仅供参考:违规行是:context.Setup(x=>x.Users.Remove(user)).Returns(user).Verifiable();有了这一行:错误没有它:测试成功。我该如何解决?.AsQueryable()生成的EnumerableQuery类没有实现IDbAsyncQueryProvider但很容易通过实现它来扩展EnumerableQuery。创建其中之一而不是调用.AsQueryable()来包装您的集合。我在下面有一个进一步扩展到IDbSet的实现,但您可能不需要走那么远。以上就是C#学习教程:使用MOQ同步方式测试EF异步方式共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望你多多关注—Local=newObservableCollection(集合);}publicObservableCollectionLocal{get;私有集;}publicTFind(paramsobject[]keyValues){thrownewNotImplementedException();}publicTAdd(Tentity){Local.Add(entity);返回实体;}publicTRemove(Tentity){Local.Remove(entity);返回实体;}publicTAttach(Tentity){returnAdd(entity);}publicTCreate(){thrownewNotImplementedException();}publicTDerivedEntityCreate()其中TDerivedEntity:class,T{thrownewNotImplementedException();}publicvoidDeleteObject(Tentity){thrownewNotImplementedException();}publicvoidDetach(Tentity){thrownewNotImplementedException();}异步任务IDbAsyncQueryProvider.ExecuteAsync(表达式表达式,CancellationTokencancellationToken){return((IQueryProvider)this).Execute(expression);}asyncTaskIDbAsyncQueryProvider.ExecuteAsync(Expressionexpression,CancellationTokencancellationToken){return((IQueryProvider)this).Execute(expression);}}集合不代表位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: