奇怪的nUnit单元测试失败

时间:2008-11-06 10:10:39

标签: vb.net unit-testing nunit

我有classX:

Sub New(ByVal item_line_no As String,ByVal item_text As String)

    ' check to ensure that the parameters do not exceed the file template limits
    Select Case item_line_no.Length
        Case Is > m_item_line_no_capacity
            Throw New ArgumentOutOfRangeException(item_line_no, "Line No exceeds 4 characters")
        Case Else
            Me.m_item_line_no = item_line_no
    End Select


    Select Case item_text.Length
        Case Is > m_item_free_text_capacity
            Throw New ArgumentOutOfRangeException("Free Text Exceeds 130 characters")
        Case Else
            Me.m_item_free_text = item_text
    End Select


End Sub

以及以下unti测试一个故障点

<ExpectedException(GetType(ArgumentOutOfRangeException), "Line No exceeds 4 characters")> _
<Test()> _
Sub testLineNoExceedsMaxLength()
    Dim it As New X("aaaaa", "Test")

End Sub

当我运行测试时,我希望在异常“Line No超过4个字符”中抛出消息

但是单元测试失败并显示以下消息

RecordTests.testLineNoExceedsMaxLength : FailedExpected exception message: Line No exceeds 4 characters
                       got: Line No exceeds 4 characters
Parameter name: aaaaa

我觉得这个简单但却让我疯狂。

注意:在ExpectedException的声明中,我得到一个过时的警告,说明不是

<ExpectedException(GetType(ArgumentOutOfRangeException), "Line No exceeds 4 characters")>

应该是

<ExpectedException(GetType(ArgumentOutOfRangeException), ExpectedException="Line No exceeds 4 characters")>

但是这会引发ExpectedException未声明错误!

3 个答案:

答案 0 :(得分:2)

确定。跑吧。

例外的消息是:

  

行号超过4个字符

     

参数名称:aaaaa

(包括换行符)

您需要将此全部指定为预期消息:

<ExpectedException(GetType(ArgumentOutOfRangeException), ExpectedMessage="Line No exceeds 4 characters" & VbCrLf & "Parameter name: aaaaa")>

答案 1 :(得分:0)

{@ 1}}已被弃用 - 即您根本不应该使用它。我可以很快找到关于这个的最佳参考是这篇文章(原文在这里)。

如果重新编写单元测试会更加清晰:

ExpectedExceptionAttribute

另见这些文章

答案 2 :(得分:0)

我不确定我是否同意您对不推荐使用的ExpectedException属性的评论。

在2.4(我正在使用的版本)中仍然完全支持它在这种情况下是ExpectedMessage导致弃用问题

uUnit Exception Guide