首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用InternalsVisibleTo而不创建循环引用

如何使用InternalsVisibleTo而不创建循环引用
EN

Stack Overflow用户
提问于 2017-03-14 07:14:40
回答 1查看 215关注 0票数 0

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

怎么解决这个问题-22?

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 07:35:27

考虑以下项目结构。

您有一个名为Company.Org.PersonManager的项目,生成一个名为

代码语言:javascript
复制
Company.Org.PersonManager.dll

它包含以下类声明

代码语言:javascript
复制
internal class Person
{
    public string Foo();
}

如果要测试Foo方法,可以在名为Company.Org.PersonManager.Test的项目中编写nunit测试。

该实现可以类似于:

代码语言:javascript
复制
[TestFixture]
public class TestPersonManager
{
    [Test]
    public void Test_Foo()
    {
        Person p = new Person();
        Assert(p .... );
    }
}

上面的代码不会编译,因为Person类仅在程序集Company.Org.PersonManager.dll中在内部可见。

如果添加以下行,这就是InternalsVisibleTo派上用场的地方。

代码语言:javascript
复制
[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应该有对Company.Org.PersonManager的引用,但是其他引用不应该是相关的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42779818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档