VS2010中的测试之单元测试

发表于:2021-5-12 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:指尖流淌    来源:博客园

  在软件开发过程中,系统构架是有很多模块构成,而每个模块都有许多函数组成,当我们的系统发生错误时候,我们必须定位在发生的错误的模块,然后精确到某个模块中的某个函数中,而这个周期就是非常浪费时间和生产效率的,我们的大部分时间浪费在寻找此Bug上,若果系统越复杂,那么我们定位错误的成本原来越高。所以在每个函数集成模块中,所以我们需要严格地单元测试来验证。在MVC模块中开发系统自动集成进去,在vs2010中我们可以为我们的函数自动生成单元测试,无论是public或者private的,我们通过鼠标右键都能自动生成单元测试函数,这个类定义在Microsoft.VisualStudio.TestTools.UnitTesting这个命名空间中。
  首先我们先创建一个被测试的类库工程,然后添加被测试代码:
usingSystem;
namespaceConsoleApplicationUnitTest
{
publicclassUnitTest
{
publicdoubleCalculateTotalPrice(doublequantity)
{
doubletotalPrice;
doubleunitPrice;
unitPrice=16.0;
totalPrice=unitPrice*quantity;
returntotalPrice;
}
publicvoidGetTotalPrice()
{
intqtV=5;
doubletotolPrice=CalculateTotalPrice(qtV);
Console.WriteLine("总价:"+totolPrice);
}
}
}
  然后我们需要单元测试的函数上鼠标右键,就会出现单元测试函数选项:
   
  点击该选项后,然后就会弹出如下窗口,该窗口会显示该工程和类中的所有的函数,我们可以选择我们要进行的单元测试的函数:
   
  在这个面板中我们可以设置项目的名称:
   
  我们选择CalculateTotalPrice和GetTotalPrice两个函数,点击确定,然后我们需要我们输入测试工程的名称,点击确定,然后我们的单元测试的工程就自动创建好了,当然,这个自动创建的过程并不是完成的,而是为我们的单元测试搭建了一个框架而已。
   
  我们看一下生成的测试代码:
#region附加测试特性
//
//编写测试时,还可使用以下特性:
//
//使用ClassInitialize在运行类中的第一个测试前先运行代码
//[ClassInitialize()]
//publicstaticvoidMyClassInitialize(TestContexttestContext)
//{
//}
//
//使用ClassCleanup在运行完类中的所有测试后再运行代码
//[ClassCleanup()]
//publicstaticvoidMyClassCleanup()
//{
//}
//
//使用TestInitialize在运行每个测试前先运行代码
//[TestInitialize()]
//publicvoidMyTestInitialize()
//{
//}
//
//使用TestCleanup在运行完每个测试后运行代码
//[TestCleanup()]
//publicvoidMyTestCleanup()
//{
//}
//
#endregion
///<summary>
///CalculateTotalPrice的测试
///</summary>
[TestMethod()]
publicvoidCalculateTotalPriceTest()
{
UnitTesttarget=newUnitTest();//TODO:初始化为适当的值
doublequantity=0F;//TODO:初始化为适当的值
doubleexpected=0F;//TODO:初始化为适当的值
doubleactual;
actual=target.CalculateTotalPrice(quantity);
Assert.AreEqual(expected,actual);
Assert.Inconclusive("验证此测试方法的正确性。");
}
///<summary>
///UnitTest构造函数的测试
///</summary>
[TestMethod()]
publicvoidUnitTestConstructorTest()
{
UnitTesttarget=newUnitTest();
Assert.Inconclusive("TODO:实现用来验证目标的代码");
}
  此处还可以注意到自动生成的代码有一些被注释的方法,这些方法我们可以选择使用
  1、[ClassInitialize()]标记的方法可在运行类中的第一个测试前运行代码。
  2、[ClassCleanUp()]标记的方法可在运行完类中的所有测试后运行代码。
  3、[TestInitialize()]标记的方法可在运行每个测试前运行代码。
  4、[TestCleanUp()]标记的方法可在运行完每个测试后运行代码。
  在测试项目中,微软为我们提供了关键的类Assert语句,用Assert语句用来比较返回值和期望值,然后返回pass或者fail的结果。如果在一个测试方法多个Assert的话,那么这个测试方法要通过测试必须让所有的Assert方法通过,不然,其中有一个fail,那么一个case就会fail.如果我们的单元测试没有任何的Assert语句,那么它的结果始终是pass的。
  Assert类有许多进行比较的方法,此外此外StringAsserts,CollectionAssert类也可用于单元测试中,具体我们可以参照MSDN
  我们添加几个参数,然后运行下看看结果:
   
  当然跟多的应用方法需要我们自己测试运行。


   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号