您现在的位置:软件测试 > 测试技术 > 单元测试 >

数据驱动单元测试实例

来源:博客园 作者:sanmao.net 发表时间:2012-01-13 15:39 点击:获取本文网址二维码
我们在对软件做功能测试时,经常需要重复相同的操作过程,但是输入不同的数据来进行测试,也就是一个单元测试对应多组测试数据。而一个单元测试中,一个Assert只能做一个判断,如果仅仅因为测试数据不同而重复设计多个相同的测试用例,显然没有人愿意这样做。

  我们在对软件做功能测试时,经常需要重复相同的操作过程,但是输入不同的数据来进行测试,也就是一个单元测试对应多组测试数据。而一个单元测试中,一个Assert只能做一个判断,如果仅仅因为测试数据不同而重复设计多个相同的测试用例,显然没有人愿意这样做。使用数据驱动测试,就能达到一个单元测试执行多组测试数据的目的,还能使操作逻辑和测试数据分离。下面就通过实例简单介绍一下这种测试方法,该实例使用excel作为存储测试数据的数据源。

  某销售人员每月的工资为底薪加提成,底薪2000,所售产品的单价10元,,当月销量不大于1000时,提成率为0.05,销量超过1000不大于2000时,提成率为0.10,超过2000时提成率为0.15,现在需要计算他每月根据产品销量应发多少工资。设计程序如下:

View Code

  namespace CalculateSalaryProject{ public class Program { public double GetTotalSalaryBySales(int sales) { const double BaseSalary = 2000; double unitPrice = 10; double royaltyRate = 0.0; if (sales <= 0) { royaltyRate = 0.0; } else if (sales <= 1000) { royaltyRate = 0.05; } else if (sales <= 2000) { royaltyRate = 0.10; } else { royaltyRate = 0.15; } return BaseSalary + unitPrice * sales * royaltyRate; } }

  }

  程序设计完毕,对程序功能进行单元测试如下:

View Code

  using CalculateSalaryProject;using Microsoft.VisualStudio.TestTools.UnitTesting;namespace TestProject{ [TestClass] public class UnitTest1 { [TestMethod] public void GetSalaryBySalesUnitTest() { Program program = new Program(); double actualSalary = program.GetTotalSalaryBySales(1); double expectedSalary = 2000.5; Assert.AreEqual(expectedSalary, actualSalary); } }}

  该测试用例只对销量为1时的情况进行了测试,而根据边界值法,需要测试的数据有-1,0,1,999,1000,1001,1999,2000,2001九种,下面就用数据驱动的方法覆盖这些数据:

  打开excel,输入测试数据如下图:

  保存为Excel 97-2003 Workbook(.xls)格式,存于测试project的bin\debug目录下。

  下面是单元测试代码

View Code

  using System;using CalculateSalaryProject;using Microsoft.VisualStudio.TestTools.UnitTesting;namespace TestProject{ [TestClass] public class UnitTest2 { private TestContext testContextInstance; public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [TestMethod] [DeploymentItem("SalesAndSalary.xls")] [DataSource( "System.Data.Odbc", @"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=D:\DataDrivenTestDemo\TestProject\bin\Debug\SalesAndSalary.xls;DefaultDir=.", "Sheet1$", DataAccessMethod.Sequential)] public void GetSalaryBySalesDataDrivenTest() { int sales = Int32.Parse(TestContext.DataRow["sales"].ToString()); Program program = new Program(); double actualSalary = program.GetTotalSalaryBySales(sales); double expectedSalary =Double.Parse(TestContext.DataRow["expectedSalary"].ToString()); Assert.AreEqual(expectedSalary, actualSalary); } }}

  另外,需要在测试project中添加引用System.Data.

  执行该测试用例,得如下测试结果:

转播到腾讯微博
填写您的邮件地址,订阅我们的精彩内容:
微博分享与邮件订阅:

    本文标题:数据驱动单元测试实例http://www.ltesting.net/ceshi/ceshijishu/dycs/2012/0113/203908.html
    (注:本文章只代表作者观点。部分文章内容来自于互联网,如您享有版权可直接联系我们。欢迎登陆领测软件测试论坛参与讨论)
    官方微博求关注:官方新浪微博 官方腾讯微博 官方QQ空间 官方博客 热门推荐订阅 填写您的邮件地址,订阅我们的精彩内容:

    软件测试视频

  • 讲解软件测试流程图
  • 讲解软件测试流程图

    软件测试整体过程 单元测试过程图 集成测试过程图 系统测试过程图 软件[详细]

  • 什么是黑盒,白盒,灰盒测试?
  • 什么是黑盒,白盒,灰盒测试?

    什么是黑盒测试? 黑盒测试一般方法? 什么是白盒测试? 什么是灰盒测试?[详细]

    社区精华

    qrcode

    二维码生成需要几秒~点击左键返回页面~!
    什么是二维码?


    _×
    推荐新闻