从Visual Basic单元测试访问Windows窗体

时间:2018-11-15 11:19:12

标签: vb.net unit-testing

我在VB.NET应用程序中创建了一个简单的Windows窗体。表单中有一个复选框,用于更改表单中其他控件的可见性。

我正在尝试创建一个单元测试,以验证此功能是否按预期工作。但是,我有几个问题。让我们从单元测试中的构造函数开始,在其中创建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

我想触发事件而不必将方法更改为“公共”,那么关于如何执行此操作的任何想法?

第二个问题是此方法中的代码会更改其他几个控件的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的{​​{1}}等于LabelVisible是在表单初始化期间设置的。

如果我启动应用程序,请加载表单并单击复选框,屏幕上的False将显示控件的名称,其后显示值MessageBox。之后一切都按预期进行。

但是,如果我运行单元测试方法,则TRUE将在屏幕上显示控件的名称,后跟MessageBox。我认为这是由于在第二种情况下,运行应用程序的主线程是测试用例的线程,而不是应用程序本身。之后,测试用例失败,因为我期望FALSE属性为Visible

我该如何从单元测试中正确访问呢?该代码可以正常运行,并且可以从应用程序中运行,并且可以按预期运行,但是我无法从单元测试项目中运行它。

0 个答案:

没有答案