Эквивалент VB6 "Услуги компилятора" - PullRequest
1 голос
/ 21 июня 2011

Я просматривал приложение VB6 под названием SimplyVBUnit .Теперь замечательно, что человек, который написал это, выпустил его исходный код, и я пытался выяснить, как они фактически выполнили функциональность модульного тестирования для VB6, но до сих пор я пытался понять, как работает код.

По сути, я надеюсь, что кто-то может объяснить мне, как создать среду модульного тестирования для VB6, учитывая (насколько мне известно), что она не реализует ничего похожего на «Услуги компилятора» или отражение, предоставляемое .NET.?

Без этих функций я не могу понять, как можно динамически вызывать метод / объект / что угодно во время выполнения и наблюдать за результатом.Есть ли шанс, что кто-то может внести свой вклад?

1 Ответ

1 голос
/ 22 июня 2011

Я использовал SimplyVBUnit в старом приложении VB6. Это великолепно. У меня более 100 тестов. Но мне пришлось серьезно изменить его, чтобы интегрировать с моим приложением (например, чтобы я мог перейти в меню «Справка» и запустить модульные тесты. В частности, я отделил пользовательский интерфейс от фактической реализации, поэтому он не зависит от пользовательского интерфейса.

Источник на самом деле не так уж и сложен (как только вы начинаете понимать, что делает парень). VB6 не имеет никакого отражения, и TLBINF32.DLL работает только с внешними DLL, поэтому, если вы хотите интегрировать SimplyVBUnit в свое приложение, вы не можете использовать этот подход.

Вы создаете класс модульного теста в ActiveX DLL, который наследуется от ITestCase. Вы реализуете метод 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.

Я могу поделиться кодом, если вы хотите отключить пользовательский интерфейс от реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...