[VB.NET] 単体テストから、親クラスの Private なメソッドを呼び出す

2013年11月25日

 たとえばこんなクラスがあったとして。

' 親クラス
Public MustInherit Class SuperClass
    Private Function SuperClassMethod() As String
        Return "Super"
    End Function
End Class

' 子クラス
Public Class SubClass
    Inherits SuperClass

    Private Function SubClassMethod() As String
        Return "Sub"
    End Function
End Class

 継承元クラスの Private を呼び出す場合、テストはこう書けます。

Imports Microsoft.VisualStudio.TestTools.UnitTesting

<TestMethod()> Public Sub UnitTest2()
    Dim target = New ClassLibrary1.SubClass

    ' 子クラス側アクセス
    Dim po = New PrivateObject(target)
    Dim retSub = po.Invoke("SubClassMethod")
    Assert.AreEqual(retSub, "Sub")

    ' 親クラス側アクセス
    Dim poSuper = New PrivateObject(target, New PrivateType(GetType(ClassLibrary1.SuperClass)))
    Dim retSuper = poSuper.Invoke("SuperClassMethod")
    Assert.AreEqual(retSuper, "Super")

End Sub

 ポイントは、親クラスのメソッドを呼びたい場合は、PrivateObject のコンストラクタ第二引数に、親クラスの型を指定した PrivateType のインスタンスを渡すところです。
 また、このインスタンス (poSuper) では、子クラス側のメソッドは呼べません。したがって子クラスのメソッドを呼びたい場合は、子クラスアクセス用のインスタンスを別に作る必要があります。






カテゴリー: Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org