• [转] Unit Test 访问Internal类型和方法


    原网页:https://blog.csdn.net/jiangzhanchang/article/details/21228091

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

      运行结果:

  • 相关阅读:
    CSS实现底部固定
    ES6新特性--多行文本
    DataTable转实体
    jQuery插件开发
    页面可编辑
    clearfix--清除浮动
    前端日历控件推荐
    图片Base64编码
    第八周学习进度博客
    人月神话多后感01
  • 原文地址:https://www.cnblogs.com/LOGHG/p/9042225.html
Copyright © 2020-2023  润新知