我在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}}等于Label
,Visible
是在表单初始化期间设置的。
如果我启动应用程序,请加载表单并单击复选框,屏幕上的False
将显示控件的名称,其后显示值MessageBox
。之后一切都按预期进行。
但是,如果我运行单元测试方法,则TRUE
将在屏幕上显示控件的名称,后跟MessageBox
。我认为这是由于在第二种情况下,运行应用程序的主线程是测试用例的线程,而不是应用程序本身。之后,测试用例失败,因为我期望FALSE
属性为Visible
。
我该如何从单元测试中正确访问呢?该代码可以正常运行,并且可以从应用程序中运行,并且可以按预期运行,但是我无法从单元测试项目中运行它。