对于单元测试如何使命名空间派生?

For unit testing how to make a namespace derived?

我有两个命名空间:

namespace MyNamespace

namespace MyNamespace.Test

第二个用于单元测试。我不想在“MyNamespace”public 中创建 类,但我希望单元测试能够访问它们。我尝试使用 internal 是因为从 Access Modifier documentation 我假设“MyNamespace.test” 会派生出来,但它不起作用。我是使用了不同的访问修饰符还是我的命名空间有误?

命名空间与 C# 中的可访问性/可见性无关;它们只是类型名称的前缀,以便将相似的类型分组在一起,用于 using 语句之类的东西。它本质上是一个编译时概念,运行时不会将名称空间识别为逻辑实体,并且需要在编译代码中使用完全限定名称。

相反,访问是在每个程序集的基础上完成的。程序集是每个 C# 项目生成的 .dll.exe 文件。同一个命名空间可能出现在多个程序集中,多个命名空间可能出现在同一个程序集中。

标记某物 internal 意味着“允许从声明此物的同一程序集中的任何地方访问它”。因此,如果您的单元测试在不同的程序集中(它们应该是,除非您想将单元测试发送给客户!),他们将无法访问 MyNamespace 中的类型,无论命名空间是什么测试在

中声明

但是,您可以让您的产品程序集使用 InternalsVisibleTo 属性允许此规则的例外情况。 See this answer for details.