У меня есть простая форма 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
.
Как я могу на самом деле получить к нему правильный доступ из модульного теста? Код работает просто отлично и, как и ожидалось, запускается из приложения, но у меня возникают проблемы при запуске из проекта модульного теста.