技术开发 频道

单元测试实践(VB版)

【IT168 技术文章】

    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调用。先把文件导入到数据库,再从数据库把文件导出到文件中,最后比较两个文件是否相同。

0
相关文章