VB.NET で Private Method、Private Shared Method を Unit Test します。
検証対象クラス
Public Class Sample Public Sub New(prefix As String) Me.Prefix = prefix End Sub Private Property Prefix As String Private Function AddPrefix(s As String) As String Return Me.Prefix & s End Function Private Shared Function ToLower(s As String) As String Return s.ToLower End Function End Class
やってる処理に深い意味はないです。
AddPrefix(Private Method)の検証
リフレクション、またはPrivateObjectを使用します。*1
Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports System.Reflection <TestClass()> Public Class PrivateMethodTest <TestMethod()> Public Sub TestMethod_Refrection() Dim c As New Sample("pre") Dim fn = c.GetType.GetMethod("AddPrefix", BindingFlags.Instance Or BindingFlags.NonPublic) Dim actual = fn.Invoke(c, {"FIX"}) Assert.AreEqual("preFIX", actual) End Sub <TestMethod()> Public Sub TestMethod_PrivateObject() Dim c As New Sample("pre") Dim pobj As New PrivateObject(c) Dim actual = pobj.Invoke("AddPrefix", {"FIX"}) Assert.AreEqual("preFIX", actual) End Sub End Class
PrivateObject の方が少しだけ使いやすいです。
ToLower(Private Shared Method)の検証
リフレクション、またはPrivateTypeを使用します。
Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports System.Reflection <TestClass()> Public Class PrivateSharedTest <TestMethod()> Public Sub TestMethod_Refrection() Dim fn = GetType(Sample).GetMethod("ToLower", BindingFlags.Static Or BindingFlags.NonPublic) Dim actual = fn.Invoke(Nothing, {"FIX"}) Assert.AreEqual("fix", actual) End Sub <TestMethod()> Public Sub TestMethod_PrivateType() Dim ptype As New PrivateType(GetType(Sample)) Dim actual = ptype.InvokeStatic("ToLower", {"FIX"}) Assert.AreEqual("fix", actual) End Sub End Class
PrivateType の方が少しだけ使いやすいです。