软件测试技术之单元测试与Moq
凌雪 2018-08-24 来源 :网络 阅读 815 评论 0

摘要:本文将带你了解软件测试技术之单元测试与Moq,希望对大家学测试技术有所帮助

本文将带你了解软件测试技术之单元测试与Moq,希望对大家学测试技术有所帮助


 单元测试
        每一个模块,都应该有对应的单元测试。单元测试可以保证你的代码准确性,大大减少出现BUG的几率。一个好的单元测试,也是重构代码必不可少的部分。
      我们可以直接在vs中,新增单元测试项目。
      类库中,只要声明TestClass,就当做是单元测试。
      单元测试分为三部分:准备,行为,断言。其中准备和行为,就是模拟程序代码执行。断言,就是判断程序执行结果与预期结果是否一致。
      断言使用:Assert类来实现。详细参见:Assert类
      [TestClass]
      public class HomeControllerTest
      {
      [TestMethod]
      public void Index()
      {
      // Arrange
      HomeController controller = new HomeController();
      // Act
      ViewResult result = controller.Index() as ViewResult;
      // Assert
      Assert.IsNotNull(result);
      }
      [TestMethod]
      public void About()
      {
      // Arrange
      HomeController controller = new HomeController();
      // Act
      ViewResult result = controller.About() as ViewResult;
      // Assert
      Assert.AreEqual("Your application description page.",   result.ViewBag.Message);
      }
      [TestMethod]
      public void Contact()
      {
      // Arrange
      HomeController controller = new HomeController();
      // Act
      ViewResult result = controller.Contact() as ViewResult;
      // Assert
      Assert.IsNotNull(result);
      }
   
      Moq
      Moq是针对Net开发的模拟库。他的目标是让模拟以一种自然的方式与现有的单元测试进行集成,使他更加直观。
      我们可以使用nuget,来获取Moq包。或者访问其官网,不过被墙了。
      局限性
        模拟的类不能为密封类。不能直接模拟静态方法。Moq只能创建模拟对象的实例。可以通过模拟的方式让他去访问service,并且根据不同的请求模拟返回响应的结果。
      原理
      Moq只需要一个接口,就可以产生一个对象。利用反射机制来动态生成一个空框架,用于模仿对象的行为。
      Mock
      通过Mock<T>这个类,我们就可以创建一个对象的模拟。T可以使接口或者类。但必须有public和virtual属性。
        通过IFake接口,去动态创建Mock。然后使用Setup方法去创建我们需要的对象。当模拟的对象调用它自己方法的时候,并且参数是Ping。
      最后Return返回对应结果,前面的请求返回结果为真。这是我们指定的返回值。当请求调用DoSomething并且传递Ping,那么就返回true。
      public interface IFake
      {
      bool DoSomething(string actionname);
      }
      [TestMethod]
      public void Test_Interface_IFake()
      {
      var mo = new Mock<IFake>();
      mo.Setup(f => f.DoSomething("Ping")).Returns(true);
      mo.Setup(f => f.DoSomething("PingF")).Returns(false);
      Assert.AreEqual(true, mo.Object.DoSomething("Ping"));
      Assert.AreEqual(false, mo.Object.DoSomething("PingF"));
      }
      IT
      It是一个静态类,定义了静态方法。可以使用泛型来指定值。
      It.IsAny<string> 表示只要传入任何String即可。
      It.Is<int>(id=>id>0 && id<6)   表示必须传入0到6的区间,才可以返回。
      It.IsIn<string> 表示可以传入的区间。 具体内容可以查看IT的接口
      [TestMethod]
      public void User_Can_Send_Password()
      {
      var email = new Mock<IEmailSender>();
      email.Setup(f => f.Send(It.IsAny<string>(), It.Is<string>(id   => id != "Chenxy"),   It.IsAny<string>())).Returns(true);
      Assert.AreEqual(true, email.Object.Send(It.IsAny<string>(),   It.IsAny<string>(), It.IsIn<string>("1", "2",   "3")));
      }    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程