c# – 使用Microsoft Fakes进行模拟

c# – 使用Microsoft Fakes进行模拟,第1张

概述我已经使用需要模拟的异步(.net 4.5)方法密封了类.我正在使用Microsoft Fakes,所以他们将“垫片”.以下代码是我需要做的一个例子.它构建但运行时,调用“Login”控制器方法中的“LoginAsync”方法,测试挂起. [TestMethod] public async Task LoginPost_Returns() { using (ShimsContext 我已经使用需要模拟的异步(.net 4.5)方法密封了类.我正在使用Microsoft Fakes,所以他们将“垫片”.以下代码是我需要做的一个例子.它构建但运行时,调用“Login”控制器方法中的“LoginAsync”方法,测试挂起.

[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进行模拟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存