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