Доступ к форме Windows из модульного теста Visual Basic - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть простая форма Windows, созданная в приложении VB.NET. В форме есть флажок, который изменяет видимость других элементов управления в форме.

Я пытаюсь создать модульный тест, чтобы убедиться, что эта функция работает должным образом. Однако у меня есть несколько вопросов. Давайте начнем с конструктора в моем модульном тесте, где я создаю экземпляр формы Windows:

Dim myWindow = Nothing
Public Sub New()
    myWindow = New APP_NAME.myWindow()
End Sub

Это работает. Затем я перехожу к одному из методов тестирования, который начинается следующим образом:

<TestMethod()> Public Sub myTest()
        Dim checkBox = getFormControl(myWindow, "CHECKBOXNAME")
        checkBox.Checked = True

Как видите, у меня есть метод с именем getFormControl, который возвращает требуемый элемент управления из формы. Это также работает, а также устанавливает проверенное значение на true.

Первая проблема заключается в том, что изменение значения не вызывает событие CheckedChanged флажка, поэтому ничто не скрывается и не отображается на экране, так как это событие и соответствующий метод обрабатывают эти переключатели. В результате мне пришлось сделать этот метод в форме Public вместо Private, чтобы я мог вызвать его следующим образом:

myWindow.CHECKBOXNAME_CheckedChanged(myWindow, EventArgs.Empty)

Определение метода в myForm:

Public Sub CHECKBOXNAME_CheckedChanged(sender As Object, e As EventArgs) Handles CHECKBOXNAME.CheckedChanged

Я хотел бы вызвать событие, не меняя метод на Public, поэтому есть идеи, как это сделать?

Вторая проблема заключается в том, что код в этом методе переходит и изменяет свойство Visible некоторых других элементов управления. Допустим, это выглядит так:

Public Sub CHECKBOXNAME_CheckedChanged(sender As Object, e As EventArgs) Handles CHECKBOXNAME.CheckedChanged
        myControl.Visible = True
        MessageBox("Making visible: " & myControl.Name & " - " & myControl.Visible)
    End Sub

myControl, который, скажем, Label имеет Visible, равный False, который устанавливается во время инициализации формы.

Если я запускаю приложение, загружаю форму и устанавливаю флажок, на экране MessageBox отображается название элемента управления и значение TRUE после. После этого все работает как положено.

Однако, если я запускаю метод модульного тестирования, MessageBox показывает имя элемента управления на экране, после которого следует FALSE. Я думаю, что это связано с тем, что во втором случае основной поток, выполняющий приложение, - это тестовые случаи, а не само приложение. После этого тестовый сценарий не проходит, так как я ожидаю, что свойство Visible будет TRUE.

Как я могу на самом деле получить к нему правильный доступ из модульного теста? Код работает просто отлично и, как и ожидалось, запускается из приложения, но у меня возникают проблемы при запуске из проекта модульного теста.

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