并行命名空间冲突
本文关键字:冲突 命名空间 并行 | 更新日期: 2023-09-27 18:06:11
我有一个单元测试项目,它反映了我的应用程序的目录和名称空间结构,除了单元测试项目将所有内容包装在Test
名称空间中。所以这个类的测试:
MyModule.MyNamespace.MySubNamespace.MyClass
将在这个类中定义:
Test.MyModule.MyNamespace.MySubNamespace.MyClass
当我尝试创建在常规(非单元测试)项目中定义的对象的实例时,如果在单元测试项目中也存在同名的类,我在单元测试项目中遇到问题。使用上面的示例,如果我在单元测试项目中使用完全限定类型名称创建类型为MyClass
的变量:
MyModule.MyNamespace.MySubNamespace.MyClass myobject = new ....
编译器假定我引用的是Test
名称空间中定义的MyClass
对象,并且不将类型名称视为完全限定名称。
简单的解决方案是重构我的单元测试名称空间,但我很好奇是否有办法解决这个问题。我需要某种方法来"强制"编译器将类型名称视为完全限定的—一种"跳出"Test
名称空间的方法。有什么办法可以做到吗?
如果没有,是否有一个更好的约定来清楚地命名我的单元测试?
在进一步搜索之后,我遇到了global
关键字,它告诉编译器假设类型名称是完全限定的:
global::MyModule.MyNamespace.MySubNamespace.MyClass
以下是MSDN上global
关键字的参考
尝试使用名称空间的别名。如
using implementation = MyModule.MyNamespace.MySubNamespace;
然后在测试
implementation::MyClass myClass = new...
这里是关于它的文档http://msdn.microsoft.com/en-gb/library/c3ay4x3d.aspx
我通常有这样的东西:
MyCompany.MyProduct.MyModuleTests.MyNamespace.MySubNamespace.MyClassTest
这通常对人们来说很清楚,也可以很好地用于TFS构建,它将尝试在所有名称中带有"Test"的程序集中检测单元测试。
如果您真的坚持您的命名约定,您可以在测试文件的顶部为名称空间使用别名:
using MyRealStuff = MyModule.MyNamespace.MySubNamespace;
在代码中使用:
MyRealStuff.MyClass myobject = new ...