Weird nUnit unit test failure

I have a class X:

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 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 a message thrown in the "Line does not exceed 4 characters" exception

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 something simple, but it drives me crazy.

NOTE: in my ExpectedException declaration, I am getting a deprecated warning that instead of

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

      

he should be

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

      

However, this throws ExpectedException, not a declared error!

0


source to share


3 answers


Ok. Just run it.

Exception message:

Line # exceeds 4 characters

Parameter name: aaaaa



(Including line break)

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

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

      

+2


source


ExpectedExceptionAttribute

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

Your unit test will be much clearer if it was rewritten:

<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

0


source


I'm not sure I agree that your comment on the ExpectedException attribute is out of date.

It is still perfectly supported in 2.4 (the version I am using), it is ExpectedMessage causing a delay issue in this case

uUnit Exception Guide

0


source







All Articles