TypeInitializationException и NullReferenceException в Gallio при вызове общего члена класса - PullRequest
1 голос
/ 31 мая 2011

Я пытаюсь использовать Gallio и MbUnit (версия 3.2.750).

В соответствии с руководством (http://gallio.org/wiki/doku.php?id=getting_started:my_first_tests) я создал новый проект класса, сослался на другой проект, который я хотел проверить (другую библиотеку классов), написал несколько тестов, а затем выполнил их.

Каждый из моих тестов действительно очень прост. И методы, которые я тестирую, также просты.

Вот пример. Тестируемая функция:

    Public Shared Function IsBool(ByVal data As Object) As Boolean
        Dim retour As Boolean = True
        Try
            If data.ToString IsNot Nothing Then
                If data.ToString = "1" Or data.ToString = "0" Then
                    retour = True
                Else
                    Boolean.Parse(data.ToString)
                End If

            End If

        Catch ex As Exception
            retour = False
        End Try

        Return retour
    End Function

И тест:

    <Test()> _
    Public Sub IsBool_trueString()
        Dim result As Boolean = IsBool("true")
        Assert.AreEqual(True, result)
    End Sub

И ошибка:

System.TypeInitializationException: Une exception a été levée par l'initialiseur de type pour 'CMS.Utility'. ---> System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
   à CMS.Utility..cctor() dans C:\...\Utility.vb:ligne 12
   --- End of inner exception stack trace ---
TypeName: CMS.Utility
   à CMS.Utility.IsBool(Object data)
   à KoamaOPTests.CMS.Tests.Utility.IsBool_trueString() dans C:\...\Tests\Utility.vb:ligne 34

Я понимаю, что не должно быть такого исключения с разделяемым методом, поэтому я очень, очень запутался.

Спасибо

1 Ответ

1 голос
/ 01 июня 2011

Ваш статический / общий метод IsBool является частью класса CMS.Utility, который, скорее всего, имеет статический конструктор (около строки 12 в Utility.vb ).

Статические конструкторы вызываются один раз, прежде чем тип можно будет использовать впервые (то есть до того, как IsBool даже будет выполнен) .Кажется, в этом есть ошибка, которая вызывает исключение нулевой ссылки.Вы можете разместить код метода рядом со строкой 12?

...