我插入一行:
[assembly: InternalsVisibleTo("MyTests")]
在我的测试项目(Properties/AssemblyInfo.cs
)中,其中MyTests
是单元测试项目的名称。但由于某种原因,我仍然无法从单元测试项目中访问内部方法。
关于我做错了什么的想法?
答案 0 :(得分:51)
如果您的程序集使用强名称look at this answer进行签名。
否则检查测试程序集的名称是否真的是“MyTests.dll”(它不必与项目名称匹配,但默认情况下也是如此)。
答案 1 :(得分:12)
让我们分解一下,因为我们很多人在过去经历过这种轻微的混乱......
程序集A有你的内部类。 装配B进行了单元测试。
您希望在程序集B中授予程序集A内部的可见性。
您需要将InternalsVisibleTo程序集属性放在程序集A中并授予对程序集B的访问权限。
答案 2 :(得分:3)
您仍然需要测试项目来引用您的主项目。
这很容易被忽视,如果您没有现有的测试代码,这可能看起来像InternalsVisibleTo无效。
答案 3 :(得分:3)
在我的情况下,我正在编写一个接口。由于接口只能指定公共属性,因此接口上不存在内部属性。
确保你没有像我那样做同样的事情!
我改变了:
Assert.IsNotNull((exportFileManager)?.ThumbnailFileExporter);
要:
Assert.IsNotNull((exportFileManager as ExportFileManager)?.ThumbnailFileExporter);
答案 4 :(得分:0)
您只能将内部名称从强命名程序集公开给另一个强命名朋友程序集。但是非强命名程序集可以使内部对象暴露于强命名朋友程序中。
答案 5 :(得分:0)
重命名名称空间后,我遇到了同样的问题。基本上.cs文件中的ins是新的名称空间,而在.csproj
和AssemblyInfo.cs
中,它是旧的名称空间。
namespace newNamespace {
....
}
因此,我在.csproj
中更改了以下名称空间:
<RootNamespace>oldnamespace</RootNamespace>
<AssemblyName>oldnamespace</AssemblyName>
在AssemblyInfo.cs中:
[assembly: AssemblyTitle("oldnamespace")]
[assembly: AssemblyProduct("oldnamespace")]