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

2013年11月17日

 たとえば、テスト対象となる、こんなメソッドがあった場合。(ルート名前空間は "ClassLibrary1" であるとします)

Public Class Class1
    Private Function func1(source As Integer(), index As Integer) As Integer

        Return source(index)

    End Function
End Class

 

 テストはこう書けます。

Imports Microsoft.VisualStudio.TestTools.UnitTesting

<TestClass()> Public Class UnitTest1
    <TestMethod()> Public Sub TestMethod1()
        Dim source = New Integer() {100, 200, 300}

        Dim target = New ClassLibrary1.Class1

        Dim po As New PrivateObject(target)
        Dim result = po.Invoke("func1", {source, 2})

        Assert.AreEqual(result, 300, "テスト")
    End Sub
End Class

 Microsoft.VisualStudio.TestTools.UnitTesting 名前空間に、PrivateObject というクラスがあるようなので、それを使うと呼び出せるようです。
 リフレクションのラッパー的な感じなので、メソッド名を文字列で渡す必要がある(=インテリセンスは効かない)のがいまひとつなところですが、リフレクションを生で呼び出すよりは、はるかに楽に書けます。






カテゴリー: 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