一、单元测试简介
1.1、单元测试简介
在《单元测试艺术》一书中对于单元测试的定义是:【一个单元测试是一段代码,这段代码调用一个工作单元(指:调用软件中的一个方法,这个方法执行过程中所发生的所有行为以及最后产生的结果的总和),并检验该工作单元的一个具体的结果。如果关于这个结果的最终假设是错误的,单元测试就失败了;一个单元测试的范围可以小到一个方法,大到多个类】
1.2、单元测试的意义
要注意:引入单元测试或有单元测试并不能证明代码质量好(应根据项目情况进行调整适配,比如优先考虑核心模块),单元测试并不是越多越好(不要忽视引入代码测试以及无效的测试所带来的维护成本【如:增加开发的时间、增加人员成本】,毕竟资源是有限的)。
若不考虑时间成本,还是希望各位可以为代码编写高效可靠的单元测试,毕竟这对提升代码质量有帮助;而单元测试具有如下意义:
1、通过单元测试用例确保的功能,不会在后续的迭代过程中产生Bug;
2、在重构模块时,因为有单元测试覆盖,也可以大胆去做;
3、可以通过单元测试模块了解模块具体功能和预期;
4、提高代码质量,降低耦合。
二、单元测试示例流程
2.1、打开VisualStudio创建项目
1、使用VisualStudio创建一个跨平台的控制台项目(取名为:Test_UnitTest),如下图所示:
2、新建一个名为: BankAccount 的银行账户类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test_UnitTest
{
public class BankAccount
{
private readonly string m_customerName;
private double m_balance;
public BankAccount(string customerName,double balance)
{
m_customerName = customerName;
m_balance = balance;
Console.WriteLine($"\n初始的余额是【{Balance}】");
}
public string CustomerName
{
get { return m_customerName; }
}
public double Balance
{
get { return m_balance; }
}
/// <summary>
/// 借钱出去
/// </summary>
/// <param name="amout">金额</param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public void Debit(double amout)
{
if (amout>m_balance)
{
throw new ArgumentOutOfRangeException("amount");
}
if (amout<0)
{
throw new ArgumentOutOfRangeException("amount");
}
m_balance += amout;
Console.WriteLine($"借钱【{amout}】出去后的余额是【{Balance}】");
}
public const string DebitAmountExceedsBalanceMessage = "当前借出的金额超过当前的余额";
public const string DebitAmountLessThanZeroMessage = "当前借出的金额小于0";
/// <summary>
/// 借钱出去
/// </summary>
/// <param name="amout">金额</param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public void Debit2(double amout)
{
if (amout > m_balance)
{
throw new ArgumentOutOfRangeException("amount",amout, DebitAmountExceedsBalanceMessage);
}
if (amout < 0)
{
throw new ArgumentOutOfRangeException("amount",amout, DebitAmountLessThanZeroMessage);
}
m_balance += amout;
Console.WriteLine($"借钱【{amout}】出去后的余额是【{Balance}】");
}
/// <summary>
/// 贷款进来
/// </summary>
/// <param name="amout">金额</param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public void Credit(double amout)
{
if (amout<0)
{
throw new ArgumentOutOfRangeException("amout");
}
m_balance += amout;
Console.WriteLine($"贷款【{amout}】进来后的余额是【{Balance}】");
}
}//Class_end
}
3、运行该银行账户类
namespace test_UnitTest
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
BankAccount ba = new BankAccount("张三", 11.99);
ba.Credit(5.77);
ba.Debit(11.22);
Console.WriteLine($"当前账户的余额是 ${ba.Balance}");
Console.ReadLine();
}
}
}
到目前为止程序是没有报错的;但是仔细查看我们就会发现一个问题,借钱出去后,我们的银行账户应该是余额减少的;但是我们的程序却显示余额增加了,这明显是错误的;关于这样的类似错误我们可以通过单元测试来避免,修复这个Bug。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理