对于单元测试如何使命名空间派生?
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.
我有两个命名空间:
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.