2011-06-21 22 views
1

私はSimplyVBUnitと呼ばれるVB6アプリケーションを使いました。 VB6の単体テスト機能を実際にどのように達成したかを試してみましたが、これまでのところ、コードの仕組みを理解するのに苦労しました。VB6「コンパイラサービス」同等

基本的に誰かが私に説明できると思っているのは、「コンパイラサービス」やリフレクションと同様のものを実装していないVB6の単体テストフレームワークの作成方法です。 。ネット?

これらの機能がなければ、実行時にメソッド/オブジェクト/何がどのように動的に呼び出され、その結果を観察するかについて頭を悩めることはできません。誰かが何らかの入力を提供する可能性がありますか?

+0

あなたはソースがリリースされていると言いますが、それを調べて調べるのはなぜですか?リフレクションは、動的コンパイルよりも単体テストフレームワークにとってはるかに重要である可能性が高いことに注意してください。 –

+0

ご質問をお書きください。私はソースを読もうとしましたが、あなたが想像しているように、それはやや複雑で、どのように動作するのか理解できませんでした。明らかに私がここで合理的な答えを得なければ、私は自分自身でそれを試し続けていきますが、これまでのところ、幸運はありません! –

+0

@Maxim:あなたを混乱させるコードベースにどうやって入ろうとしているのでしょうか?あなたがすでに試したこと、どれだけ持っているかなどを説明します。コードをビルドしてデバッガで動作させましたか?単体テストの実行中にブレークポイントに達したことがありますか?スタックトレースを確認しましたか?コードの*ビット*があなたを混乱させていますか? –

答えて

1

私は古いVB6アプリケーションでSimplyVBUnitを使用してきました。それは素晴らしい。 100以上のテストがあります。しかし、私はアプリケーションとの統合のために大きく変更しなければなりませんでした(例えば、ヘルプメニューに移動してUnit Testsを実行できるようにするため)。UIを実際の実装から分離したので、UIには依存しません。

VB6には反射がなく、TLBINF32.DLLは外部DLLでしか動作しないため、SimplyVBUnitをアプリケーションに統合したい場合は、そのDLLを使用することはできません。アプローチ

あなたは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を切り離したい場合は、コードを共有できます。