软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试技术>>单元测试>>正文
单元测试实践(VB版)
文章出处: 作者:紫龙 发布时间:2005-11-11
vb有多个单元测试的软件,如VBunit,communit。此处选择communit来作为单元测试的,原因是一、它是完全开放源码的,二、它不仅能测试VB源代码,还能测试标准COM组件。communit可以从sourceforge.net下载,也可以本地下载,本地版本与有两个修改,一是修正模板的安装,原来的包没有完全设置好,二是增加了时间的计算,能显示测试花费的时间。

    使用,把包下载,然后解到一个目录,运行install.exe,打开VB。可以发现可以新建CoMunit Test Project的工程。有两个文件frmTestRunner的form,TCTestContainer是测试类。下面我们看一下如何使用comunit。先下载测试代码

     这个代码是测试二进制文件在数据库里的存取。有关二进制代码在数据库里存取的技术问题,请看另一篇文章。用什么办法来确定代码是正确工作了呢?答案当然是单元测试。

    测试代码很简单,但的确很有效,它保证这段代码是正确的工作了。

' COMUnit 1.1 - TestContainer Class

Option Explicit

' Interface declaration
Implements ITestContainer
'定义一个recordset
Dim k As New adodb.Recordset
'定义bin类
Dim BinTest As clsManagerBinFields
'定义源文件名和目标文件名
Dim SourceFile As String, DesFile As String
' Fixture Member Variables
' TODO: specify your TestContainer test fixture member variables here

' Return the name of the different test case methods in this test container
Public Property Get ITestContainer_TestCaseNames() As Variant()
' TODO: add the names of your test methods as a parameter into the Array() function
 ITestContainer_TestCaseNames = Array("TestFields")
End Property

' Run the specified test case methods in this test container
Public Sub ITestContainer_RunTestCase(oTestCase As ITestCase, oTestResult As TestResult)
On Error GoTo ErrorHandler
 InvokeHook Me, oTestCase.Name, INVOKE_FUNC, oTestResult
' CallByName Me, oTestCase.Name, VbMethod, oTestResult
Exit Sub
 ErrorHandler:
 oTestResult.AddError Err.Number, Err.Source, Err.Description
End Sub

'Initialize the test fixture
'在测试开始时自动调用
Public Sub ITestContainer_Setup()

' TODO: initialize your test fixture here
'指定源文件名,这里就指定这个文件
SourceFile = App.Path & "\tctestcontainer.cls"
'指定目标文件名,这里指定为当前目录下的test
 DesFile = App.Path & "\test"

 Set BinTest = New clsManagerBinFields

'如果目标文件存在,则删除这个文件
 If Dir(DesFile) <> "" Then Kill DesFile

'建立一个新的Recordset,这里用一个虚拟的数据源来代替,这样就不用打开数据库了
 k.Source = "test"
 k.Fields.Append "thefile", adBinary, -1, adFldUpdatable
 k.Open , , adOpenKeyset, adLockBatchOptimistic
 k.AddNew

End Sub

'Destroy the test fixture
Public Sub ITestContainer_TearDown()
' TODO: destruct your test fixture here
' k.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\xpconnect\db\test.mdb;Persist Security Info=False"
' k.UpdateBatch adAffectAllChapters
' k.Close
'测试完成后自动完成
 Set k = Nothing
 Set BinTest = Nothing

End Sub

'Public Sub testSampleMethod(oTestResult As TestResult)
' TODO: add your test code here
'End Sub
Private Sub TestFieldtoFile(oTestResult As TestResult)
 oTestResult.Assert BinTest.FieldToFile(DesFile, k!thefile), "导出到文件不成功"
End Sub
Private Sub TestFiletofield(oTestResult As TestResult)
 oTestResult.Assert BinTest.fileTofield(SourceFile, k!thefile), "导入到数据库不成功"
End Sub
Public Sub TestFields(oTestResult As TestResult)
 TestFiletofield oTestResult
 TestFieldtoFile oTestResult
 oTestResult.Assert FileLen(SourceFile) = FileLen(DesFile), "文件不相符!"
End Sub

写单元测试代码很简单,只要完成几个函数就可以了。

Public Property Get ITestContainer_TestCaseNames() As Variant()
' TODO: add the names of your test methods as a parameter into the Array() function
 ITestContainer_TestCaseNames = Array("TestFields")
End Property

第一个,ITestContainer_TestCaseNames。是测试函数的列表,ITestContainer_TestCaseNames = Array("TestFields")TestFields就是函数名,要测试这个函数,就写在这个数组里。

Public Sub ITestContainer_RunTestCase(oTestCase As ITestCase, oTestResult As TestResult)
On Error GoTo ErrorHandler
 InvokeHook Me, oTestCase.Name, INVOKE_FUNC, oTestResult
' CallByName Me, oTestCase.Name, VbMethod, oTestResult
Exit Sub
 ErrorHandler:
 oTestResult.AddError Err.Number, Err.Source, Err.Description
End Sub

这个函数是自动生成的,不用修改。

'在测试开始时自动调用
Public Sub ITestContainer_Setup()

End Sub

这个函数是每一个测试函数运行时自动调用的,可以在这个函数中初始化测试的内容。

Public Sub ITestContainer_TearDown()

End Sub

这个函数是每个测试函数结束时,自动运行,在这个函数中可以释放在测试中使用的资源。

'Public Sub testSampleMethod(oTestResult As TestResult)
' TODO: add your test code here
'End Sub
Private Sub TestFieldtoFile(oTestResult As TestResult)
 oTestResult.Assert BinTest.FieldToFile(DesFile, k!thefile), "导出到文件不成功"
End Sub
Private Sub TestFiletofield(oTestResult As TestResult)
 oTestResult.Assert BinTest.fileTofield(SourceFile, k!thefile), "导入到数据库不成功"
End Sub
Public Sub TestFields(oTestResult As TestResult)
 TestFiletofield oTestResult
 TestFieldtoFile oTestResult
 oTestResult.Assert FileLen(SourceFile) = FileLen(DesFile), "文件不相符!"
End Sub

这三个函数就是测试函数。TestFields是公共测试函数,另两个函数由TestFields调用。先把文件导入到数据库,再从数据库把文件导出到文件中,最后比较两个文件是否相同。

下面我们来看怎么在VB中使用。打开工程,在VB工具菜单中选项中把修改错误捕获的设置。改成遇到未处理错误的中断。如下图所未。

运行程序,出现下面这个界面。下面可以看到有一个类可以测试,选择这个类,看Test Case列表,就能看到TestFields这个测试函数了。 按RunTest。如果通过测试,就能说明这两段代码就达成目的了。

下面我们来看出现错误的情况。把函数TestField中TestFieldtoFile oTestResult注释掉。这样就只导入文件,不进行导出文件。看一下Run Tests的结果,如下图所未:

可以看到,progress条变成红色,表示运行过程中有出错的测试。下错误列表中列出出现错误函数名及错误内容,可以双击出现某条单独的错误说明。下面状态条有测试的统计信息。

我们看上面的简单的39行代码,就能保证另一个类代码的正确性,并且,以后可以进行任意的修改,只要代码能够通过测试就能保证修改的没有产生意外的错误。


站内搜索
相关文章
◎Linux:让内存不再泄漏
◎感悟测试驱动开发
◎软件测试技术获重大突破
◎PHP单元测试工具PHPUnit初体验
◎使用NUnit在.Net编程中进行单元测试
◎Java性能的优化
◎Java内存泄漏分析
◎Java的内存泄漏
◎NUnit快速入门
◎单元测试方法
◎单元测试浅析
◎java的单元自动化测试---jtest
◎Java程序的单元测试
◎自动进行团队构建和单元测试过程
◎C语言单元测试框架-Check
◎在Eclipse中使用JUnit
◎EasyMock与JMock的比较
◎FindBugs第1部分: 提高代码质量
◎静态测试
◎测试Linux的可靠性
◎TestNG使Java单元测试轻而易举
◎诊断 Java 代码:单元测试与自动化代码分析协同工作
◎JBuilder单元测试实例
◎使用Rational Software Architect
◎怎样使用Junit Framework进行单元测试的编写
◎“白盒”静动测试两齐全
热门文章
◎全面介绍单元测试
◎单元测试------理论篇
◎Java内存泄漏分析
◎单元测试作业指导书(一)
◎junit实现过程
◎白盒测试中的六种覆盖方法
◎JUnit起步
◎单元测试方法
◎C/C++单元测试问答(摘要)
◎nunit使用资料
◎单元测试的基本方法
◎如何挑选白盒测试工具
◎NUnit快速入门
◎在Eclipse中使用JUnit
◎Java的内存泄漏
◎Linux:让内存不再泄漏
◎单元测试的小技巧介绍和举例
◎单元测试指导
◎为什么要进行单元测试?
◎单元测试作业指导书(二)
◎“白盒”静动测试两齐全
◎数据库程序的单元测试
◎静态测试
◎单元测试浅析
◎ant结合junit进行软件自动测试
◎单元测试作业指导书(三)
◎单元测试作业指导书(四)
◎CppUnit - 测试驱动开发入门
◎用cppUnit进行单元测试的步骤
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(一)
◎java的单元自动化测试---jtest
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(三)
◎使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Te...
◎C语言单元测试框架-Check
◎EasyMock与JMock的比较
◎Java程序的单元测试
◎JUnit中如何测试异常
◎怎样使用Junit Framework进行单元测试的编写
◎使用NUnit在.Net编程中进行单元测试
◎J2EE应用的性能调整--JPROBE使用篇
◎单元测试和事先测试开发
◎JBuilder单元测试实例
◎感悟测试驱动开发
◎软件测试技术获重大突破
◎C语言高效编程的的四招技巧
◎使用ant编译、运行junit、以及检查编码
◎JCoverage使用
◎让编译和测试过程自动化
◎自动进行团队构建和单元测试过程
◎有关Junit的多线程测试

Google提供的广告