全新的vb.net和单元测试,希望得到一些简单的帮助

时间:2011-09-20 03:36:01

标签: vb.net

我正在尝试对输入到文本框(txtPrice)的数据进行单元测试。如果它不是数字,它会抛出一个消息框,指出输入必须是数字。但是,当我进行单元测试时,我无法弄清楚为什么我的测试会触发消息框两次。 这是我的(简单)单元测试:

Public Sub txtBoxes_LeaveTest()
    Dim target As frmEstimate_Accessor = New frmEstimate_Accessor ' TODO: Initialize to an appropriate value
    Dim sender As Object = Nothing ' TODO: Initialize to an appropriate value
    Dim e As EventArgs = Nothing ' TODO: Initialize to an appropriate value

    sender = target.txtPrice.Text
    target.txtPrice.Text = "112L"

    Dim expected As String
    Dim actual As String

    expected = "112L"
    target.txtBoxes_Leave(sender, e)
    actual = target.txtPrice.Text
    Assert.AreEqual(expected, actual, "txtPrice.leave event not functioning correctly")
End Sub

我的理解是,对于单元测试,您声明发件人,并且(在这种情况下)将发件人设置为某个值,该值将使消息框跳闸。 112L应该在休假活动中这样做。然后我写下我的预期,在这种情况下是112L,触发事件,然后从文本框中取出实际值。然后我Assert.AreEqual确保预期和实际相同。

首先,这是正确的吗?第二,为什么会两次开火?

谢谢。

2 个答案:

答案 0 :(得分:3)

您不希望单元测试导致出现消息框。关于单元测试的一个重要部分是能够自动运行它们,而像MsgBox和文本框值这样的东西就会破坏它。

您想要做的是缩小测试范围。您的离开事件应该调用单独的验证方法。根据方法的结果,您的离开事件可能会对表单进行更改。该方法将接受一个字符串作为输入,并返回一个布尔值,无论该字符串是否有效,返回一个更正的字符串,或抛出一个异常。根据该方法编写测试。您要做的是进行单元测试,以验证此验证方法是否正在按预期进行。

答案 1 :(得分:2)

仅当过程名称处理不同的控制事件时才使用sender

你可以这样做:

Private Sub txtPrice_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPrice.Leave
    If Not IsNumeric(txtPrice.Text) Then
        MsgBox("txtPrice is not numeric!", MsgBoxStyle.Critical, "Error")
        txtPrice.SelectAll()
        txtPrice.Focus()
    End If
End Sub