たとえばこんなクラスがあったとして。
' 親クラス
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) では、子クラス側のメソッドは呼べません。したがって子クラスのメソッドを呼びたい場合は、子クラスアクセス用のインスタンスを別に作る必要があります。