C# 单元测试

一、         单元测试

是软件测试方法的其中一种,其中还有比如动态黑盒测试、数据测试、破坏性测试等等。

单元测试也称之为“模块测试”,是对程序设计中的最小单元——函数进行测试的一种方法,所谓测试,就是验证我们自己编写的方法能不能够得到正确的结果,即用方法得到的结果与真实结果进行比对,这就称之为测试。建立单元测试首先需要建立一个测试项目,具体操作如下:

 

二、          控制台程序的单元测试

1、 首先建立一个类库项目,里面包含一个计算类Calculate.cs,该类里面包含一个计算加法的方法Add,声明如下:

namespace核心类

{

   publicclassCalculate

   {

       publicdouble Add(double d1,double d2)

       {

            return d1 + d2;

       }

   }

}

生成项目之后会有一个“核心类.dll”,

那么这个方法需要进行测试,就要建立一个测试项目,建立对应的测试项目有两种方法:

 

2、 建立测试项目

方法一、

在解决方案中再添加一个新的测试项目,“右击/添加/新建项目”,在左侧选择“测试”模板,确定即可,如下

namespace测试类

{

   [TestClass]

   publicclassCalculateTest1

   {

       [TestMethod]

       publicvoid AddMethod1()

       {

            Calculate cal = newCalculate();

            double d1 = 110;

            double d2 = 220;

            Assert.AreEqual(cal.Add(d1,d2),230);

       }

   }

}

注意我们需要手动更改类名和方法名,都改成以Test1和Method1结尾。生成解决方案的时候,我们打开“测试资源管理器窗口”及执行菜单命令“测试/窗口/测试资源管理器”就可以了,然后就可以看见每一个对应的方法所对应的测试方法名称,我们可以选择运行单个方法,也可以选择运行所有的测试方法。那么测试的方法体怎么去写呢?

由于测试本来的意义就是验证一个方法你能不能得到正确的计算结果,所以我们需要找出一个正确的计算结果,与方法计算的结果进行比较就可以了,实现如下:

using System;

usingMicrosoft.VisualStudio.TestTools.UnitTesting;

using核心类;   //这里需要先手动添加自定义的程序集

 

namespace测试类

{

   [TestClass]

   publicclassCalculateTest1

   {

       [TestMethod]

       publicvoid AddMethod1()   //这是方法体部分

       {

            Calculate cal = newCalculate();

            double d1 = 110;

            double d2 = 220;

            Assert.AreEqual(cal.Add(d1,d2),330);  //使用Assert静态类

       }

   }

}

然后在测试资源管理器中运行该方法的测试结果,运行能够正常通过,如果将上面的330改为230,很显然,两者结果不相等,测试不通过,会在测试资源管理器中显示出来。

 

方法二、

不需要手动添加测试项目,让VS自动完成,具体操作如下:

在需要进行测试的方法上即Add上“右击/创建单元测试”,VS会自动创建一个测试项目,如下所示:

namespace核心类.Tests

{

   [TestClass()]

   publicclassCalculateTests

   {

       [TestMethod()]

       publicvoid AddTest()

       {

            Calculate cal = newCalculate();

            Assert.AreEqual(cal.Add(200, 300), 500);

       }

   }

}

测试方法体是自己添加的。其他的操作一样。

 

三、    注意事项

在测试类中必须要引入的命名空间

usingMicrosoft.VisualStudio.TestTools.UnitTesting;

自动创建的测试项目我们不用管,但是如果是自己手动创建的测试项目还必须手动添加程序集

Microsoft.VisualStudio.QualityTools.UnitTestFramework

 

1、测试项目和被测试项目之间的名称是具有关系的,具体如下对应关系

(测试项目名——测试项目名Tests)

(命名空间——命名空间.Tests)

(测试类名——测试类名Tests)

(测试方法——测试方法Test)

2、在测试类中,类必须使用特性[TestClass()]或者是[TestClass]修饰,测试的方法必须使用[TestMethod()]或者是[TestMethod]修饰,

3、测试方法的返回类型必须为void ,并且测试函数不能够有参数

4、在测试方法中的代码一般都是分为以下两个步骤

(1)   创建测试类的对象Calculate cal = newCalculate();

(2)   使用断言来判断测试结果Assert.AreEqual(cal.Add(200, 300), 500);

    5、Assert静态类的相关判断方法(自己去查看定义即可)

完整的中文版《单元测试之道C#版》。单元测试不但会使你的工作完成得更轻松,而且会令你的设计变得更好,甚至大大减少你花在调试上面的时间。 在我们上面的小故事里面,Pat 因为假设底层的代码是正确无误的而卷入麻烦之中,先是高层代码中使用了底层代码;然后这些高层代码又被更高层的代码所使用,如此往复。在对这些代码的行为没有任何信心的前提下,Pat 等于是在假设上面用竖立卡片堆砌了一间房子——只要将下面卡片轻轻移动,整间房子就会轰然倒塌。 当基本的底层代码不再可靠时,那么必需的改动就无法只局限在底层。虽然你可以修正底层的问题,但是这些对底层代码的修改必然会影响到高层代码,于是高层代码也连带地需要修改;以此递推,就很可能会动到更高层的代码。于是,一个对底层代码的修正,可能会导致对几乎所有代码的一连串改动,从而使修改越来越多,也越来越复杂。于是,整间由卡片堆成的房子就由此倒塌,从而使整个项目也以失败告终。 Pat 总是说:“这怎么可能呢?”或者“我实在想不明白为什么会这样”。如果你发现自己有时候也会有这种想法,那么这通常是你对自己的代码还缺乏足够信心的表现——你并不能确认哪些是工作正常的而哪些不是。 为了获得Dale 所具有的那种对代码的信心,你需要“询问”代码究竟做了什么,并检查所产生的结果是否确实和你所期望的一致。 这个简单的想法描述了单元测试的核心内涵:这个简单有效的技术就是为了令代码变得更加完美。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值