微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VS单元测试入门

微软在VSTSVisual Studio Team System2005中集成了单元测试框架(Team Test),就是我们平时所说的单元测试(UnitTest)了。

今天,就让我们通过一个简单的例子,来尝试一下UnitTest的魅力吧。

首先,先建立一个例子项目。我们新建了一个UnitTestClass Library项目(如下图)

建立好例子项目后,我们就在认的Class1类中增加一个GetNameById方法。这个方法就是供我们进行单元测试的方法了。

方法很简陋。。。但这不是重点。只要它是一个方法。能供我们测试就行了,对吧?下面我们开始进行对给方法UnitTest了。在方法名称上面点击右键,选择“Create Unit Tests...

选择“Create Unit Tests...”后会弹出一个窗口,里面已经勾选好我们写的方法,我们就是要对该方法进行测试。所以勾选的地方不用动。需要注意的是,下边的Output project认是VB.net语言的。我们要将它改回C#的,因为我们用C#嘛。当然你用VB你可以选VB.net

点击OK,然后输入New Test Project Name,这里我们输入TestGetNameById:

然后在Solution Explorer就多了个名为TestGetNameByIdTest Project一个Solution ItemsSolution Folder

相关的文件作用如下:

localtestrun.testrunconfig 本地测试运行配置文件

MySchoolPro.vsmdi 测试管理文件

AuthoringTest.txt 提供创建测试的说明,包括向项目增加其他测试的说明;

Class1Test.cs 包含GetNameById()的测试,以及测试初始化和测试清除的方法.

打开Class1Test.cs文件,会发现一个GetNameByIdTest方法。这个方法就是我们GetNameById方法的测试方法了。

方法定义了我们要测试的方法GetNameById的输入intId认值为0。期待输出expected认为nullactual为测试我们写的GetNameById方法实际得到的值。如果期望值expected和实际输出actual一致。Assert是“断言”类,它判断测试是否成功。文后附有该方法的一些断言方法,如符合断言,那么系统就会认为测试通过。

需要注意的是“Assert.Inconclusive("Verify the correctness of this test method.")”语句是表示这个测试是一个无法验证的测试,当我们完成了测试方法(填好了参数和期待值、比较方式)之后,需要把它屏蔽

当我们如上图修改好测试参数后。我们就点击菜单上的Test -> Windows -> Test View 打开Test View

Test View的窗口可以看到GetNameByIdTest方法,在该方法上直接点右键,选择“Run Selection”即可运行测试。

如果不选择“Run Selection”而选择“Debug Selection”的话,就可以在测试项目上加断点调试测试方法。这对于方法体比较复杂或者输入涉及数据库等操作的时候会很方便。

运行“Run Selection”后可以看到以下输出窗口:

看到了吗? Passed!我们成功了!

至此,UnitTest的入门介绍告一段落了,你也算踏入了单元测试的门槛,至于它能发挥多大的作用,就看你自己以后的修为了。

附送一些测试中的Assert方法

Assert.AreEqual

测试指定的值是否相等;如果两个值不相等,则测试失败。

Assert.AreNotEqual

测试指定的值是否不相等;如果两个值相等,则测试失败。

Assert.AreSame

测试指定的对象是否都引用相同的对象;如果两个输入内容引用不同的对象,则测试失败。

Assert.AreNotSame

测试指定的对象是否引用不同的对象;如果两个输入内容引用相同的对象,则测试失败。

Assert.Fail

断言失败。

Assert.Inconclusive

表示无法证明为 true false 的测试结果。

Assert.IsTrue

测试指定的条件是否为 true;如果该条件为 false,则测试失败。

Assert.IsFalse

测试指定的条件是否为 false;如果该条件为 true,则测试失败。

Assert.IsNull

测试指定的对象是否为 空引用(在 Visual Basic 中为 nothing);如果它不为空,则测试失败。

Assert.IsNotNull

测试指定的对象是否为非空;如果它为 空引用(在 Visual Basic 中为 nothing),则测试失败。

另外,代码覆盖率也是一个重要的指标,是指单元测试运行时,覆盖了多少代码VSTS认是没有打开代码覆盖率的。Team Test 包含了一个代码覆盖工具,可以详细解释被执行代码的覆盖率,并突出显示哪些代码被执行,哪些代码没有被执行。既然这个是我们这次第一次入门,就不详细介绍了。要深入了解的话就“找找看”吧,或者我们下一篇关于UnitTest文章再介绍代码覆盖这个问题。

浅析vs2008单元测试和代码覆盖率

VS2008本身集成有单元测试工具,我们可以拿来用一下,首先在创建测试的方法上右键,选择创建单元测试,如下图示:

在弹出的对话框中,选择要测试的方法,如下图示:

单击OK按钮,即可创建一个测试工程,工程创建好后,会看到如下代码

/// <summary>

///A test for Add

///</summary>

[TestMethod()]

public void Addtest()

{

int n = 10; // Todo: Initialize to an appropriate value

int m = 0; // Todo: Initialize to an appropriate value

int expected = 0; // Todo: Initialize to an appropriate value

int actual;

actual = TestedClass.Add(n,m);

Assert.AreEqual(expected,actual);

Assert.Inconclusive("Verify the correctness of this test method.");

}

这就是自动为我们创建好的代码了,很简单,可以自己修改一下测试用例,然后点击运行工程就可以运行了,会看到如下图示的运行结果:

这里显示了测试的情况,还可以双击查看具体测试报告,并且可以将测试报告导出。

当然,如果我们还想再添加被测试的方法也很简单,如,我用下面这段代码增加了对Minus方法的测试

[TestMethod]

public void Minustest()

{

int n = 10;

int m = 1;

int result = 10;

Assert.AreEqual(TestedClass.Minus(n,m),result);

}

现在可以直接点RUN运行了。

VSTS还提供了查看代码覆盖指标。

他包含了一个代码覆盖工具,可以详细解释被执行代码的覆盖率,并突出显示哪些代码被执行,哪些代码没有被执行。VSTS 生成单元测试框架时,认没有启用“代码覆盖”功能

首先打开“本地测试运行配置文件 localtestrun.testrunconfig 双击localtestrun.testrunconfig文件,弹出该对话框窗口。

如下图示:

在其对话框窗口的左侧选择“代码覆盖率”,然后在右侧的“要检测的项目”中选择要检测的项目。

单击“apply”按钮。

在“代码覆盖率结果”窗口中可查看代码覆盖率。

在“代码覆盖率结果”窗口中,我们还可以查看单元测试中代码覆盖的块数,以及代码覆盖的百分比信息。如下图示:

VS2008的单元测试可以集成NUnit也可以使用他自带的,这个可以以自己的喜好来进行选择,我个人比较喜欢Nunit方式。

VS2008的本身单元测试不仅可以显示测试结果,还可以显示覆盖率等信息,操作比较方便。NUnit轻量,开源,与其它工具整合性好,易于实现自动化测试,要显示覆盖率还要集成NCover,我会在下篇文章进行介绍如何集成。

原文地址:https://www.jb51.cc/vb/261910.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐