Visual StudioのUnitTestでinternal(C#)やFriend(VB.NET)のクラスをテストする方法

この記事は公開から4年以上経過しています。

Visual StudioのUnitTest(MSTest)でinternal(C#)やFriend(VB.NET)で宣言されたクラスをテストする方法についての備忘録。


問題点

テスト対象クラスのアクセス修飾子がinternal/Friendの場合、当然ながら外部アセンブリからアクセスすることができないため、UnitTestアセンブリからもアクセスできない。


対応

被テスト対象クラスのあるアセンブリ内のソースにInternalsVisibleToAttribute("テストアセンブリ名")属性を設定する。

C#

// Foo.cs(被テストプログラム)
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("FooTest")]

namespace FooLib
{
    internal class Foo
    {
        public bool Bar() => true;
    }
}
// FooTest.cs(テストプログラム)
using FooLib;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace FooTest
{
    [TestClass]
    public class FooTest
    {
        [TestMethod]
        public void BarTest()
        {
            Assert.IsTrue(new Foo().Bar());
        }
    }
}

VB.NET

' Bar.vb(被テストプログラム)
Imports System.Runtime.CompilerServices

<Assembly: InternalsVisibleTo("BarTest")>

Friend Class Bar

    Public Function Foo() As Boolean
        Return True
    End Function

End Class
' BarTest.vb(テストプログラム)
Imports BarLib

<TestClass()>
Public Class BarTest

    <TestMethod()>
    Public Sub FooTest()
        Assert.IsTrue(New Bar().Foo())
    End Sub

End Class


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする