zoukankan      html  css  js  c++  java
  • Moq的使用心得

    1. 1.MoqMock Repository时最好是Mock Repository的接口,这样会避免不知名的错误。

      var mockClubRepository = new Mock<IClubRepository>();
      
      mockClubRepository.Setup(mr => mr.GetById(It.IsAny<Guid>()))

      2.Moq 中怎样返回空(How to return null in Moq):

      mockRepository.Setup(mr => mr.GetItems()).Returns(() => null);

      这种写法很常用,比如返回一个空的List

      mockRepository.Setup(mr => mr.GetItems()).Returns(() => new List<Object>);

       3.怎样Mock一个IsValid == false ModelState

      很简单:UsersController.ModelState.AddModelError("username","Bad username"); 添加个ModelError就可以改变ModelStateIsValid属性了。

      4.How to Mock User.Identity.Name

      Testing controller Action that uses User.Identity.Name

      ControllerCreateControllerForUser(string userName) 
      {
          var mock = newMock<ControllerContext>();
          mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
          mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
      
          var controller = newSomeController();
          controller.ControllerContext = mock.Object;
      
          return controller;
      }

      5. 有时候需要单元测试文件上传,那么怎么去Mock一个上传的文件呢?

      原理很简单,只需要MockHttpContext.Request.Files的一些需要的属性即可,例如:

      View Code

      ASP.NET MVC中,上传的文件都是放在HttpPostedFileBase这个对象中,我们可以直接Mock这个对象,对保存文件的方法进行单元测试

      View Code
       [TestMethod]
      
              public void TestUpLoadFile()
      
              {
      
                  var mockFile = new Mock<HttpPostedFileBase>();
      
                  mockFile.Setup(d => d.FileName).Returns("test.txt");
      
                  mockFile.Setup(d => d.ContentLength).Returns(100);
      
                  mockFile.Setup(d => d.InputStream).Returns(new MemoryStream());
      
       
      
                  const string uploadsFolder = "D:\\UploadedFiles";
      
                  Domain.DMS.File file = _fileService.UploadedFile(mockFile.Object, uploadsFolder);
      
       
      
                  Assert.AreEqual("test.txt", file.FileName);
      
                  Assert.AreEqual(100, file.FileSize);
      
                  Assert.AreEqual("txt", file.FileExtension);
      
              }

           

        

  • 相关阅读:
    参考阿里规范,优秀的 Java 项目代码该如何分层?
    SpringBoot 中实现跨域的5种方式
    美团一面:你既然写过Mybatis插件,说说它底层是怎么加载一个自定义插件的
    陌陌面试官:说说Spring AOP 的原理、SpringMVC 的处理过程?
    这16条规范代码,同事,拍桌子 大喊 “666”
    微服务很简单,用一张架构图了解一下
    K8S部署Metrics-Server服务
    cookie
    html标签默认样式整理
    html 语义化标签
  • 原文地址:https://www.cnblogs.com/young2012/p/2850602.html
Copyright © 2011-2022 走看看