文本Tag: TestDirector 单元测试 测试工具 .NET

  【IT168 技术文档】

  引言

  在实际的项目中,我们会遇到如下的问题:

  1. 在编写一些不太好调试的程序时,如WebService 和一些后台运行的程序时,如何调试?

  2. 在某些架构中存在一些底层框架,这些框架如何来调试?

  3. 当我们编写一个方法或者一些存在互相引用的方法,如何从上到下进行一次调试?

  4. 当编写出来一个方法后,难道现在你还在使用如下步骤调试?编译、F9断点、运行、调试?难道你不觉得好费时间啊。。。?或者你觉得为了一个方法不值,将一堆方法一起来调试/测试,这样难道不会遗漏一些方法也就是会遗漏一些BUG?

  5. 如果我们要使用单元测试工具来测试一些底层的东西,通常正常的流程是编写一个单元测试模块[Test],然后利用单元测试工具执行来测试。但是这也是单元测试的一个弊端,太费时间。

  ……

  基础

  第一:既然我们这篇文章使用的单元测试工具是TestDriven.NET,那么总的先下载一个安装吧,下载地址:http://www.testdriven.net/download.aspx。

  第二:这里我不跟大家将单元测试理论,也不讲如何使用单元测试工具TestDriven.NET进行单元测试。

  这篇文章的核心是调试,好了,废话不多说,开始吧。

  安装完TestDriven.NET后,在NET工程中,代码.cs 文件中弹出的右键菜单,将会多出三个选项,例如下图:

  这里也顺便说一下新增的三个选项:

  Run Test(s):点击后,在下方的信息栏中将会显示测试结果:

  Test With:点击后将会显示子菜单:Debugger 使用NET的调试器调试;.NET 1.1将此方法运行在NET1.1框架下;Coverage 将会启动TestDriven.NET 自带的NCoverExplorer 进行代码覆盖分析;In_Proc 不太清楚有什么用。

  Repeat Test Run:重复测试。

  当第一次运行TestDriven.NET 后,在系统托盘栏中将会出现如下图标:

  当右键点击此图标,可以进行TestDriven.NET 工具进程的操作:

  我们来开始使用TestDriven.NET 来调试我们的第一个方法吧:

  在我们要测试的方法F9增加断点,右键,选择Test With->Debugger,然后可以看到调试到断点处了:

  然后F10/F11单步调试吧,在下方监视窗口中可以正常进行监视的:

  也就是说,当使用TestDriven.NET 的Debugger 功能调试时,可以进行一个方法的调试,是不会运行其它方法的。

  很省时间吧。

  上面介绍了TestDriven.NET的Debugger 功能的基本使用方法,那么再来一些调味料吧。

  几种调试方式

   内嵌调试

  所谓内嵌调试是指在方法中有参数的情况下采取的一种简便的调试方式。

  例如我们需要调试如下方法:

  public int CountAAddB(int a, int b)

  {

  return a + b;

  }

  为了调试这个方法,我们采取在方法内部初始化参数的方法来调试。

  public int CountAAddB(int a, int b)

  {

  a = 2;

  b = 3;

  return a + b;

  }

  然后利用TestDriven.NET 调试。

  内嵌调试就是调试包含输入参数的方法时,将输入的参数在方法内部赋值,调试/测试完毕后,再删除内部的赋值。这种方法相当节省时间,但是不利于重复调试/测试。

  其实内嵌调试并不能算是一种很正规的调试/测试方法,但是我们编程过程中会遇到如下问题:第一:当一个方法返回类型为void 时,你编写单元测试代码如何去测试其正确性?第二,当一个方法是private 时,你用单元测试工具编写测试相当麻烦(网上有人写过用反射来测试private方法,但是相当麻烦)。而内嵌调试在方法内部快捷而简单。

  这里我还想说一点的是,我们调试的预设值调试完毕后,注释掉,方便下次变动的时候在此调试。这样避免忘记调试/测试用例。

   内接调试

  内接调试就是指内部接口调试。例如我们需要测试CountAAddB 方法,我们编写了一个新的测试方法:

  public void TestCountAAddB()

  {

  int i = CountAAddB(1, 2);

  }

  然后调试这个方法,跟进到CountAAddB 方法里面。

  内接调试就是编写桩模块来调试被调试方法,在桩模块中断点,然后跟进到被调试方法中。这种方法需要增加一个额外的调试方法,可以进行重复调试/测试。

  这个编写的测试方法,可以在要调试类里面,也可以在要调试类外面。

   外接调试

  外接调试就是指外部接口调试。例如我们需要调试CountAAddB方法,这个方法在ProjectCount 中,我们新建一个新的工程TestProCount,然后在这个工程里面引用ProjectCount 工程,在新建工程TestProCount 定义调试方法TestCountAAddB,断点后然后步进到ProjectCount工程中的CountAAddB 方法进行调试。

   烤串调试

  烤串调试就是指测试某一个基于其它方法的基方法,就像调试一串烤串。例如我们要测试如下代码中Count方法:

  public int CountAAddB(int a, int b)

  {

  return a + b;

  }

  public int CountAMultiplyB(int a, int b)

  {

  return a * b;

  }

  public void Count()

  {

  int i = CountAAddB(1, 2);

  int j = CountAMultiplyB(3, 4);

  int ij = i + j;

  }

  Count 方法应用了两个方法:CountAAddB和CountAMultiplyB,通常我们调试Count方法,也就完成了对CountAAddB和CountAMultiplyB的调试。

  调试FAQ

   当调试包含参数的构造函数类时,为什么调试不了?

  的确,当调试一个类,该类包含参数构造函数但是不包含无参数构造函数时,断点是进不去的,因为该类的默认参数没有赋值和初始化,如何解决这个问题,有两种方法。

    第一种,将该类的含参的构造函数注释掉或者添加一个无参的构造函数。

    第二种,采用内接调试方法实例化包含参数的类,然后调试。

   几种停止调试的方法

  在上图中,可以看到有两种,一种是直接点击工具栏中的停止按钮,第二种就是【工具】->【About Test Run】 选项。

  后序

  也许我上面所给出来的几种方法难登大家法眼,我只是将自己的一些东西写出来给大家分享。为什么我会这么做?在我们项目过程中,一面要承受工程进度的压力,一面又要考虑到软件质量的问题,我们需要在这两者之间找到一个平衡,为此我们要寻找一种既保证质量,又不是很费时间的调试/测试方法来解决这个矛盾。

  我上面所给出的几种调试方法都是相当简洁的调试方法,能够在较短时间内调试/测试所编写的方法,虽说并不完美,但是也相得益彰,通常是编写一个方法,马上就调试/测试所编写的方法,保证了方法的有效性和正确性。

  我所列举出来的几种调试方法都是相当基础的方式,至于怎么去用还得靠自己,复杂的东西都是基础变过来的。

  最重要的是我们要养成把质量放在第一位的思维模式,要养成调试/测试的良好习惯,保证软件的质量和项目的进度。

转载于:https://www.cnblogs.com/leilei03632/archive/2010/05/05/1728241.html

使用单元测试工具TestDriven.NET调试程序相关推荐

  1. Openstack_单元测试工具 tox

    目录 目录 扩展阅读 Openstack 的单元测试工具 单元测试工具使用流程 tox toxini 参考文章 扩展阅读 Python Mock的入门 Openstack 的单元测试工具 unitte ...

  2. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  3. python 单元测试 工具_Django单元测试工具test client使用详解

    The test client test client是一个python类,来模拟一个简单的"哑"浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情 ...

  4. SAP UI5 初学者教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  5. SAP UI5 应用开发教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍

    Jerry 在之前做 SAP UI5 标准开发和现在使用 Angular 开发 SAP Spartacus 应用时,我们团队的开发规范就是,每增添一个新的前端 feature,必须要用一个新增的单元测 ...

  6. 常见单元测试工具介绍

    1.       C/C++语言开发的首选利器- C++Test 以前在windows平台下的开发,使用的框架主要是MFC,以及console工程(基于win32SDK),属于纯C/C++开发的范畴. ...

  7. 说实话,写了这么多程序了,还从来没有用JUnit作为单元测试工具测试过,今天就来学习一下

    1.    说实话,写了这么多程序了,还从来没有用JUnit作为单元测试工具测试过,心理面感到真的是惭愧.原来的所有测试,我都是通过在控制台打印输出语句看结果,这样就可以根据自己打印的信息自己去判断, ...

  8. 1019.单元测试工具CUnit

    单元测试工具 1 CUnit 单元测试工具的安装 2 关于cunit编译成第3库添加到eclipse中使用 3 cunit示例demo 4 展示效果 5 CUnit 的交叉编译 6 参考博客 1 CU ...

  9. 当前主流的单元测试工具

    Parasoft Jtest 是第一个自动化Java单元测试工具. Jtest自动测试任何Java类或部件,而不需要您写一个测试用例.驱动程序或桩函数.只要点击一个按钮,Jtest自动测试代码构造(白 ...

最新文章

  1. oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...
  2. 注意!这些行为均涉嫌科研不端!
  3. 521忘记送大家礼物了,补上!
  4. aspnet网站开发实例_给自己开发一个网站,这是我的方法。
  5. 如何使用github和git进行团队合作开发(队友和owner的仓库连接)
  6. FIND、FINDINDEX、INDEXOF、LASTINDEX、INCLUDES 数组五种查询条件方法介绍
  7. Internet Download Manager 6.32.6 V2 下载工具
  8. 2021年六级翻译:云南
  9. 使用WINPE制作U盘启动
  10. 一个小白的自渡-Git 仓库基础操作
  11. 不属于计算机主机设备的是什么,不属于计算机硬件的是什么
  12. 网红电商剧烈洗牌,机会将属于拥有“头部网红矩阵”的MCN机构?
  13. 十三 Keras卷积神经网络 cifar10
  14. docker打jdk 1.8镜像
  15. 杨毅:不够优秀就不要腆着脸继续占便宜
  16. 课程设计-商店管理系统(一)----前端页面的制作(一)
  17. 实验室周赛暨CCPC选拔赛
  18. 2021年低压电工考试试卷及低压电工考试总结
  19. fckeditor漏洞_三十,文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御
  20. Creo导入电路生成的emn格式文件并编辑标注尺寸-提示不重新生成模型错误-解决

热门文章

  1. Flutter Text详解
  2. ★LeetCode(104)——二叉树的最大深度(JavaScript)
  3. react-native gradle
  4. JavaScript学习(八十)—请写一段JS程序提取URL中的各个get参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中
  5. durpal是否支持php7,drupal7 的安装方法
  6. python可以开多少线程_python爬虫可以开多少线程?
  7. rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇
  8. 为何手机可以用,电脑连接不上
  9. 手机需不需要更新系统?
  10. 二婚不领证吃亏的是谁?