この記事は公開から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
参考ウェブサイトなど
- Microsoft
InternalsVisibleToAttribute
以上です。