1. 程式人生 > >Unit Test 訪問Internal型別和方法

Unit Test 訪問Internal型別和方法

       原則上Unit Test主要是測試一些Public的型別和方法等,但是有時候我們需要驗證標記為Internal的型別是不是正常工作。那麼,既然被標記為Internal了,應該就不能被所在專案之外的專案訪問了,這時最容易想起來的方式是將Internal標記的型別臨時改為Public,此方法可行,但是在大量Internal型別需要修改的時候就不適用:不但修改起來繁瑣,還有可能會在最後忘記改回Internal而影響程式設計的結構。所以本文簡單的介紹另一種較為簡單可行的辦法:在被測試的程式碼庫的AssemblyInfo.cs中新增“[assembly: InternalsVisibleTo("UnitTest專案名稱")]”。

舉一個簡單的例子說明:

被測試專案:MyClassLibrary

AssemblyInfo.cs檔案如下:

using 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")]
被測試的型別:ClassDoThings
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();
        }
    }
}

執行結果:

----轉載請註明出處