调用类的共享成员时,Gallio中的TypeInitializationException和NullReferenceException

时间:2011-05-31 08:36:36

标签: .net vb.net nullreferenceexception typeinitializeexception

我正在尝试使用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 个答案:

答案 0 :(得分:1)

您的静态/共享方法IsBool是类CMS.Utility的一部分,其中很可能是static constructor Utility.vb 中的第12行)。

静态构造函数在第一次使用之前(即IsBool执行之前)之前调用一次。似乎它中存在导致空引用异常的错误。你能在第12行附近发布方法的代码吗?