【问题标题】:What is the equivalent of Java's default (package) access in C#?Java 在 C# 中的默认(包)访问等价物是什么?
【发布时间】:2010-11-22 17:48:06
【问题描述】:

Java 在 C# 中的默认(包)访问等价物是什么?有吗?有没有限制对特定命名空间的访问?

问题:

我试图限制对某些方法的访问仅限于我的 NUnit 测试 - 在 JUnit 中,我将通过使方法包访问并在同一个包中但在 src/test/java 而不是 src/ 下进行测试来做到这一点主/java。如何在 C# 中实现类似的功能?

注意:我无法创建 internal 方法,因为我的测试在单独的程序集中 - 正如 NUnit 约定一样 - 或者是这样吗?

【问题讨论】:

    标签: c# java unit-testing nunit access-modifiers


    【解决方案1】:

    C# 没有包或命名空间级别的访问权限 - 只有程序集级别 - 也称为 internal 访问权限。

    但是,您可以将方法设置为内部方法并使用InternalsVisibleTo 属性将它们公开给您的单元测试程序集。

    read 这个帖子和this one 你可能会发现它很有用。

    【讨论】:

      【解决方案2】:

      没有什么是完全等价的。 internal 关键字很接近,但它受限于程序集,而不是命名空间。

      如果某些东西被标记为内部,它只能被同一个程序集(dll、exe)中的代码访问

      【讨论】:

      • ...或通过使用 InternalsVisibleTo 授予访问内部项目的明确权限的其他程序集中的代码。
      【解决方案3】:

      还有另一种截然不同的方式。你可以像这样使用partial classes

      1. 文件 #1 = 正在测试的代码。像平常一样写,但使用“部分”关键字
      2. 文件 #2 = 单元测试,包含一个作为实际单元测试的嵌套类。

      嵌套类可以访问其父类中的所有内容(包括私有方法)。作为构建过程的一部分(可能是 MSBuild 或 NAnt 脚本),不要将测试作为最终程序集的一部分进行编译,被测代码可以正常工作。

      【讨论】:

        【解决方案4】:

        您可以通过将方法设置为内部来限制方法仅在其程序集中可见

        【讨论】:

          猜你喜欢
          • 2019-11-01
          • 2010-12-07
          • 2010-11-22
          • 1970-01-01
          • 2011-10-13
          • 1970-01-01
          • 1970-01-01
          • 2014-05-22
          相关资源
          最近更新 更多