如何在不创建循环引用的情况下使用InternalsVisibleTo

时间:2017-03-14 07:14:41

标签: c# .net reflection

我对InternalsVisibleTo的理解是它主要用于单元测试。但这意味着我的单元测试类,如果它在一个单独的项目中,需要引用具有InternalsVisibleTo类的项目,并且 类需要对该单元的引用测试类,以便将其程序集名称放入属性的参数中。

如何解决这个Catch-22?

1 个答案:

答案 0 :(得分:1)

考虑以下项目结构。

您有一个名为(SF^OF)|ZF的项目,正在构建一个名为

的程序集
Company.Org.PersonManager

它包含以下类声明

Company.Org.PersonManager.dll

如果要测试Foo方法,可以在名为internal class Person { public string Foo(); } 的项目中编写一个nunit测试

实现可能类似于:

Company.Org.PersonManager.Test

上面的代码无法编译,因为Person类只在程序集[TestFixture] public class TestPersonManager { [Test] public void Test_Foo() { Person p = new Person(); Assert(p .... ); } }

中内部可见

如果您添加以下行

,这就是Company.Org.PersonManager.dll派上用场的地方
InternalsVisibleTo
项目[assembly: InternalsVisibleTo("Company.Org.PersonManager.Test.dll")] 中的

Properties/AssemblyInfo.cs,您告诉编译器该程序集 Company.Org.PersonManager可以访问程序集Company.Org.PersonManager.Test.dll

中的内部类和方法

这不应该导致循环引用,Company.Org.PersonManager.dll应该引用Company.Org.PersonManager.Test,但不需要其他引用。