• 数据驱动单元测试实例


    我们在对软件做功能测试时,经常需要重复相同的操作过程,但是输入不同的数据来进行测试,也就是一个单元测试对应多组测试数据。而一个单元测试中,一个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.

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

  • 相关阅读:
    架构之道(1)
    看板管理(1)
    交互原型图
    Sequence Diagram时序图
    安卓项目的「轻」架构
    安卓ButtomBar实现方法
    工具类BitMap 把网络URL图片转换成BitMap
    使用OkHttp上传图片到服务器
    BaseAdapter教程(2) BaseAdapter的notifyDataSetChanged动态刷新
    开发中时间变换问题汇总
  • 原文地址:https://www.cnblogs.com/sanmao_net/p/2208754.html
Copyright © 2020-2023  润新知