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();
        }
    }
}

运行结果:

源代码下载:UnitTestVisitInternal.rar

----转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值