[TestMethod] public async Task LoginPost_Returns() { using (ShimsContext.Create()) { var c = new TestController(); var user=new User(); Fakes.ShimUserManager.Allinstances.LoginAsyncString = (um,u) => new Task<IUser>(() => { return user; }); //call controller method var result = await c.Login(model,returnUrl) as VIEwResult; var expectedVIEwname = "Index"; Assert.IsNotNull(result); Assert.AreEqual(expectedVIEwname,result.VIEwname); }//Controller methodpublic async Task<ActionResult> Login(LoginModel model,string returnUrl) { var user = await UserManager.LoginAsync(model.Username,model.password); return VIEw();}解决方法 不要在异步代码中使用Task构造函数.如果您只需要一个带有返回值的已完成任务,请使用Task.Fromresult:
IUser user = new User();Fakes.ShimUserManager.Allinstances.LoginAsyncString = (um,u) => Task.Fromresult(user);
作为附加提示,在单元测试中涵盖这些情况是个好主意:
>同步成功(Task.Fromresult(user)).>异步成功(Task.Run(()=> user)).>异步错误(Task.Run(()=> {throw new InvalIDOperationException(“或what”); return user;})).
总结以上是内存溢出为你收集整理的c# – 使用Microsoft Fakes进行模拟全部内容,希望文章能够帮你解决c# – 使用Microsoft Fakes进行模拟所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)