关闭

C#中实现单元测试的示例流程_MSTest测试项目(1)

发表于:2023-11-29 09:20

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

 作者:虚幻如影    来源:CSDN

  一、单元测试简介
  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),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号