Weird nUnit unit test failure

别等时光非礼了梦想. 提交于 2019-12-13 03:34:10

问题


I have 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

and the following unti to test one point of failure

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

End Sub

When I run the test I expect to get the message thrown in the exception "Line No exceeds 4 characters"

However the unit test fails with the following message

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

I think the something simple but it driving me insane.

NOTE: in the declaration of the ExpectedException I get an obsolete warning stating that instead of

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

it should be

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

However this throws a ExpectedException is not declared error!


回答1:


Ok. Just run this.

The message for the exception is:

Line No exceeds 4 characters

Parameter name: aaaaa

(Including the line break)

You need to specify this all of this as the expected message:

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



回答2:


I'm not sure I agree with your comment of the ExpectedException attribute being deprecated.

It is still supported perfectly fine in 2.4 (version I am using) it is the ExpectedMessage in this case which is causing the deprecation issue

uUnit Exception Guide




回答3:


The ExpectedExceptionAttribute is deprecated - i.e. you shouldn't use it at all. The best reference I could quickly find about this was this post (the original article is here).

Your unit test would be a lot clearer if it was re-written:

<Test()> _
Sub testLineNoExceedsMaxLength()
    Try

        Dim it As New X("aaaaa", "Test")

    Catch ex as ArgumentOutOfRangeExcpetion

        Assert.That ( ex.Message, Is.Equal("Line No exceeds 4 characters") )

    End Try

End Sub

See also these articles

  • This one, and
  • This one.


来源:https://stackoverflow.com/questions/268184/weird-nunit-unit-test-failure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!