2011-06-21 48 views
1

我一直在经历一个叫做SimplyVBUnit的VB6应用程序。现在最重要的是写这个的人已经发布了它的源代码,我一直在试图弄清楚他们是如何实现VB6的单元测试功能的,但到目前为止我一直在努力去理解代码的工作原理。VB6“编译器服务”等效

基本上我希望有人能向我解释的是,如何创建一个VB6的单元测试框架(据我所知),它没有实现类似于“编译器服务”或由。净?

如果没有这些功能,我无法理解如何在运行时动态调用方法/对象/无论什么情况,并观察结果。任何机会有人可以提供一些输入?

+0

你说源已被释放 - 那么为什么你不通过它来找出?请注意,反射对于单元测试框架来说可能比动态编译更重要。 –

+0

请重新阅读问题。我曾尝试阅读源代码,但正如您可以想象的那样,它非常复杂,我一直无法理解它是如何工作的。显然,如果我在这里得不到合理的答案,我会继续尝试自己去解决问题,但到目前为止,没有运气! –

+0

@Maxim:我认为如果你把它放大一些,将会是一个更有趣的问题,如“你如何开始陷入困惑你的代码库?”。解释你已经试过的东西,你有多远,等等。你是否构建了代码并使它在调试器中工作?你是否在执行单元测试时遇到了一个突破点,并查看了堆栈跟踪?代码中的哪一点*会让你感到困惑? –

回答

1

我一直在旧VB6应用程序中使用SimplyVBUnit。这很棒。我有超过100个测试。但我不得不大幅改变它以将其与我的应用程序集成(例如,以便我可以进入帮助菜单并运行单元测试。具体而言,我将UI与实际实现分开,因此它与UI无关。源代码实际上并没有那么复杂(一旦你了解这个人正在做什么)VB6没有任何反射,TLBINF32.DLL只能在外部DLL上工作,因此如果你想将SimplyVBUnit集成到你的应用程序中,你不能接受。方法

您在从ITestCase继承一个ActiveX DLL创建单元测试类你实现一个名为的runTest方法中的方法,您具备以下条件:。

Private Sub ITestCase_RunTest(ByVal TestNum As Long, TestName As String, ExpectErrNum As Long, EndOfTests As Boolean) 
    Dim objTestNum As New TestNumGenerator 

    Select Case TestNum 
     Case objTestNum.NextNumber 
      TestName = "Instantiate an APDebit Object" 
      Test_InstantiateAPDebitObject 
     Case objTestNum.NextNumber 
      TestName = "Create an APDebit record." 
      Test_CreateAPDebit 
     Case objTestNum.NextNumber 
      TestName = "Load an APDebit record." 
      Test_LoadAPDebit 
     Case Else 
      EndOfTests = True 

    End Select 

End Sub 

然后,您将您的类传递到UnitTest框架中,并调用其上的RunTest方法。

如果您希望从实施中断开UI,我可以共享代码。