代码之家  ›  专栏  ›  技术社区  ›  Kevin Montrose

如何访问另一个程序集中的类以进行单元测试?

  •  19
  • Kevin Montrose  · 技术社区  · 17 年前

    我开始用VisualStudio2008的方式进行单元测试,我想知道实现交叉组装的最佳方式是什么 class 用于测试目的的访问。

    基本上,我在一个解决方案中有两个项目:

    1. 我的项目(C#)
    2. MyProjectTests(C#测试项目)

    MyProject中的所有内容当前都具有默认的可访问性,如果我回忆正确,这意味着所有内容都是有效的 internal 水平,但有几个 delegates

    除了直截了当的回答外,请举一个解决方案的例子。

    6 回复  |  直到 17 年前
        1
  •  39
  •   Arnold Zokas    17 年前

    可以使用程序集级属性 InternalsVisibleToAttribute

    添加

    [assembly:InternalsVisibleTo("MyProjectTests")]
    

    转到MyProject程序集中的AssemblyInfo.cs。

        2
  •  4
  •   Chris Hayes    11 年前

    您需要添加

    [assembly:InternalsVisibleTo("Unit.Tests.Assembly")] 
    

    到您的“MyProject(C#)”的AssemblyInfo.cs。然后允许您的测试访问内部测试方法。

        3
  •  3
  •   AdaTheDev    17 年前

    [汇编:InternalsVisibleTo(“MyProjectTestsNameSpace.MyProjectTests”)]

    进一步资料如下: here

        4
  •  1
  •   Gishu    17 年前

    看来你需要 InternalsVisibleToAttribute

    但是我建议不要使用这种方法——通过公共接口或API测试您的内部类。

        5
  •  1
  •   StuartLC    12 年前

    虽然 [InternalsVisibleTo]

    • 利用 Reflection

       var method = instance.GetType().GetMethod(
          methodName, BindingFlags.NonPublic | BindingFlags.Instance, 
          null, paramTypeArray, null);
       return method.Invoke(instance, parameters);
      

    这种方法的问题是,如果方法名称或签名发生更改,单元测试将在运行时开始失败,而 [内部可视]

        6
  •  1
  •   allo    8 年前

    我找到了这个 https://msdn.microsoft.com/en-us/library/hh598957.aspx

    总结:

    • 在单元测试项目中,添加对测试代码的引用。下面介绍如何在同一解决方案中创建对代码项目的引用:
    • 在解决方案资源管理器中选择项目。
    • 在“引用管理器”对话框中,打开“解决方案”节点并选择“项目”。