Странный сбой модульного теста - PullRequest
0 голосов
/ 06 ноября 2008

У меня есть 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

и следующие, чтобы проверить одну точку отказа

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

End Sub

Когда я запускаю тест, я ожидаю получить сообщение с исключением "Строка № превышает 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 ]

2 голосов
/ 06 ноября 2008

Хорошо. Просто запустите это.

Сообщение об исключении:

Строка № превышает 4 символа

Имя параметра: aaaaa

(включая разрыв строки)

Вам необходимо указать все это как ожидаемое сообщение:

<ExpectedException(GetType(ArgumentOutOfRangeException), ExpectedMessage="Line No exceeds 4 characters" & VbCrLf & "Parameter name: aaaaa")>
0 голосов
/ 06 ноября 2008

Я не уверен, что согласен с вашим комментарием об устаревшем атрибуте ExpectedException.

Он все еще прекрасно поддерживается в 2.4 (я использую версию), в этом случае именно ExpectedMessage вызывает проблему устаревания

Руководство по исключениям

0 голосов
/ 06 ноября 2008

ExpectedExceptionAttribute устарела - то есть вы вообще не должны его использовать. Лучшая ссылка, которую я мог быстро найти об этом, была эта почта (оригинальная статья здесь). Ваш модульный тест был бы намного понятнее, если бы он был переписан:

<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

Смотрите также эти статьи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...