您的位置:首页 > 其它

使用Visual Studio 2013进行单元测试

2015-11-14 14:43 330 查看
1.打开VS2013 --> 新建一个项目。这里我们默认创建一个控制台项目。取名为UnitTestDemo

2.在解决方案里面新增一个单元测试项目。取名为UnitTestDemoTest

创建完毕后项目结构大概如下:

 


3.进入控制台项目UnitTestDemo的Program类,创建一个Add方法。
namespace UnitTestDemo
{
class Program
{
static void Main(string[] args)
{
}

public static int Add(int num1, int num2)
{
return num1 + num2;
}
}
}


 

4.我们的目的就是测试上面的Add方法运行是否正常,返回结果是否正确。

5.在单元测试项目中引用控制台项目,引用完毕后项目结构如下:

 


6.单元测试项目里面UnitTest1这个类的名字取得太难看了,我们把名字改为ProgramTest,表明这是在测试Program类。改完如下:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestDemoTest
{
[TestClass]
public class ProgramTest
{
[TestMethod]
public void TestMethod1()
{
}
}
}


 

7.上面就是VS为ProgramTest类默认生成的方法。可以看到ProgramTest具有一个【TestClass】特性,表明这是一个测试类。TestMethod1具有一个【TestMethod】特性,表明这是一个测试方法。

 

8.可以这样理解,一个方法必须具有【TestMethod】特性,且其所属的类具有【TestClass】特性,那么这个方法才会被VS承认为一个【单元测试方法】。

如果没有上面的两个特性中的一个,编译生成是没有任何问题的。但是VS不会把其作为一个【单元测试方法】。

 

9.“VS不把一个方法作为【单元测试方法】”是什么意思呢?

依次点击VS的菜单栏【测试】--> 【窗口】-->【测试资源管理器】,可以打开测试资源管理器。

 


 



10.测试资源管理器里面会显示当前解决方案里面的所有单元测试。说明白点就是这里只显示符合【第8点】要求的方法。

你可能会说,为什么上面的图里面什么都没显示,【TestMethod】特性和TestClass】特性现在不是都有吗?

原因是你还没有生成程序集。OK,按F6.就可以看到【测试资源管理器】中显示了【TestMethod1】:

 


11.我们要清楚我们创建单元测试的初衷:是用工具帮助我们测试软件的质量、稳定性、性能等等。【VS】在这里就充当了工具的作用。

 

12.回到命名的问题,很明显TestMethod这个名字太难看了,我们把它改成AddTest表示这是在测试Add方法。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestDemoTest
{
[TestClass]
public class ProgramTest
{
[TestMethod]
public void AddTest()
{
}
}
}


 

13.截止目前,我们已经建立了一个可以执行的测试框架,虽然没有起到什么作用,但是测试已经可以执行了。

执行测试的方法之一是:右键点击需要测试的【单元测试】方法的名称,选择运行:

 


运行测试之后,可以在测试资源管理器中查看测试的结果:

 


执行单元测试的方法有很多,这些需要我们在不断的学习中去体会。

 

14.接下来我们做一点有意义的事情。改进AddTest方法:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestDemoTest
{
[TestClass]
public class ProgramTest
{
[TestMethod]
public void AddTest()
{
int num1 = 100;
int num2 = 200;

Assert.AreEqual(Program.Add(num1, num2), 300);
}
}
}


 

在这之前,请把Program类的可见性改为internal或者Public。

?15.“Assert”之前没接触过单元测试的朋友,或者英语差点的可能不认识。上谷歌翻译:



清楚的看到,“Assert”的意思是“断言”。所以“Assert.AreEqual(Program.Add(num1, num2), 300);”这句话的意思就是:我断言“Program.Add(num1, num2)”的结果就是300。

而断言的正确与否只需要通过测试工具测试即可。如果测试通过说明此断言是正确的,反之就说明这个测试失败了。

断言有很多种,包括上面普通的Assert,还有字符串断言,集合断言等等。

16.ok,运行测试可以看到测试通过。



 

17.如果上面所说的你都明白,那么到这里为止,你可以自己编写简单的单元测试代码并执行测试了。

最后还有一个要说的就是,如果你觉得手动编写单元测试类和方法太麻烦,那么可以使用“Unit Test Generator”插件帮助你生成单元测试和方法。

这样你可以把重心偏到编写测试逻辑上。

“Unit Test Generator”可以通过VS菜单栏【工具】-->【扩展和更新】-->搜索““Unit Test Generator””取得。



 

18.安装“Unit Test Generator”需要重启VS。

在需要进行单元测试的类和方法上点击右键,如图操作(图中演示的是生成单元测试方法)

 



 

点击之后会弹出一个对话框,需要你配置一个名称的规则,配置好后点击ok即可生成测试方法。



19.最后希望大家养成随时测试代码的好习惯。


2、编写测试方法

单元测试的基本方法是调用被测代码的函数,输入函数的参数值,获取返回结果,然后与预期测试结果进行比较,如果相等则认为测试通过,否则认为测试不通过。

1、Assert类的使用

Assert.Inconclusive()    表示一个未验证的测试;

Assert.AreEqual()         测试指定的值是否相等,如果相等,则测试通过;

AreSame() 用于验证指定的两个对象变量是指向相同的对象,否则认为是错误

AreNotSame() 用于验证指定的两个对象变量是指向不同的对象,否则认为是错误

Assert.IsTrue()              测试指定的条件是否为True,如果为True,则测试通过;

Assert.IsFalse()             测试指定的条件是否为False,如果为False,则测试通过;

Assert.IsNull()               测试指定的对象是否为空引用,如果为空,则测试通过;

Assert.IsNotNull()          测试指定的对象是否为非空,如果不为空,则测试通过;

2、CollectionAssert类的使用

用于验证对象集合是否满足条件

StringAssert类的使用

用于比较字符串。

StringAssert.Contains

StringAssert.Matches

StringAssert.tartWith

 


3、数据驱动的单元测试

数据驱动的单元测试是指单元测试的输入数据遍历一个数据源的所有行。从数据源的没一行读入数据并传入给测试方法使用


3.1、ACCESS数据驱动单元测试

1)打开测试视图窗口,选择测试视图

 

2)在测试视图窗口中选择需要配置成数据驱动方式的单元测试方法,然后按F4,打开单元测试的属性窗口

 

3)编辑“数据连接字符串”属性,在“属性”窗口中单击该属性,然后单击省略号 (…)。这将打开“选择数据源”对话框,其中列出了若干个可能的数据源,包括 ODBC、Microsoft SQL Server 和 Microsoft Access。选择一个数据源后将打开一个特定于该数据源类型的对话框;可以使用此对话框配置该数据源的连接属性。配置完数据连接后,连接字符串会作为“数据连接字符串”的值出现。此字符串还会作为单元测试方法的一个属性存储起来

 

4)在这个界面中,选择一个Acess表data.mdb,单击“确定”按钮完成设置,回到“单元测试属性”窗口。可以看到数据源的已经设置好。

 

5)在建立与数据源的连接之后,可以选择一个数据表。当您单击“属性”窗口的值列中的下拉列表时,将会列出所连接的数据库中的表。从此列表中选择的表就是在运行单元测试时将检索其中的行的表。与“数据连接字符串”等其他属性一样,“数据表名称”也会作为单元测试方法的一个属性存储起来。

6)在“数据访问方法”,请选择“顺序”或“随机”;默认值为“顺序”。此设置表示从数据源的表中检索记录的顺序。

可以看到,在测试方法前面已经添加了一行:

 

7)数据源的使用

通过 TestContext 类的 DataRow 和 DataConnection 属性将数据提供给正在运行的单元测试。下面为使用TestContext 类的 DataRow属性来读入数据行

 

8)Acess数据源中的表为

 


3.2、读取Excel的方法:

1)在桌面新建一个txt文件,更改文件名为data.dsn

2)选中“数据库连接字符串”,单击右边列的按钮,更改数据源为Microsoft ODBC数据源,点击“确定”按钮

 

3)选择使用连接字符串,点击生成

 

4)选择Excel数据源的驱动程序,点击“下一步”

 

5)选择data.dsn为数据源保存文件,一直选择“下一步”。

 

6)在弹出的选择工作簿中,选择用例的输入文件data.txt,点击“确定”

 

7)选择用例所在的Sheet页,选择“完成”

 

8)数据源的使用代码

 


4、单元测试的运行

单元测试的运行有两种方式:调试和运行。可以像调试普通代码一样对单元测试代码进行调试,当然也可以直接运行,单元测试的结果将在“测试结果”界面中展示,双击测试结果,可以得到测试结果的详细信息。单元测试的代码覆盖率可以在“代码覆盖率结果”界面中展示。

 

 


5、附加测试属性

“附加测试属性”。默认都是被注释掉的,只要我们取消注释就可以使用了。这个功能的加入,很大程度上是为了增加测试的灵活性。具体的属性有:

[ClassInitialize()]在运行类的第一个测试前先运行代码

[ClassCleanup()]在运行完类中的所有测试后再运行代码

[TestInitialize()]在运行每个测试前先运行代码

[TestCleanup()]在运行完每个测试后运行代码

如在执行测试时,将测试执行时间输入到日志中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: