Unit Test 訪問Internal型別和方法
阿新 • • 發佈:2019-01-09
原則上Unit Test主要是測試一些Public的型別和方法等,但是有時候我們需要驗證標記為Internal的型別是不是正常工作。那麼,既然被標記為Internal了,應該就不能被所在專案之外的專案訪問了,這時最容易想起來的方式是將Internal標記的型別臨時改為Public,此方法可行,但是在大量Internal型別需要修改的時候就不適用:不但修改起來繁瑣,還有可能會在最後忘記改回Internal而影響程式設計的結構。所以本文簡單的介紹另一種較為簡單可行的辦法:在被測試的程式碼庫的AssemblyInfo.cs中新增“[assembly: InternalsVisibleTo("UnitTest專案名稱")]”。
舉一個簡單的例子說明:
被測試專案:MyClassLibrary
AssemblyInfo.cs檔案如下:
被測試的型別:ClassDoThingsusing System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("MyClassLibrary")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MyClassLibrary")] [assembly: AssemblyCopyright("Copyright © 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: InternalsVisibleTo("MyClassLibrary.UnitTest")] [assembly: ComVisible(false)] [assembly: Guid("37e87d2d-e928-4639-9207-ad66340cf511")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
namespace MyClassLibrary
{
internal class ClassDoThings
{
internal void Do()
{
}
}
}
Unit Test: UnitTest1
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace MyClassLibrary.UnitTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var classDoThings = new ClassDoThings(); classDoThings.Do(); } } }
執行結果:
----轉載請註明出處