60

我插入以下行:

[assembly: InternalsVisibleTo("MyTests")]

在我的 test( Properties/AssemblyInfo.cs)项目MyTests中,单元测试项目的名称在哪里。但由于某种原因,我仍然无法从单元测试项目中访问内部方法。

关于我做错了什么的任何想法?

4

6 回答 6

72

如果您的程序集使用强名称签名,请查看此答案

否则,请检查您的测试程序集的名称是否真的是“MyTests.dll”(它不必与项目名称匹配,尽管默认情况下会匹配)。

于 2013-09-17T09:10:32.867 回答
15

让我们把它分解一下,因为我们中的许多人过去都经历过这种轻微的混淆......

程序集 A 有你的内部类。程序集 B 有你的单元测试。

您希望在程序集 B 中授予程序集 A 的内部可见性。

您需要将 InternalsVisibleTo 程序集属性放在程序集 A 中并授予对程序集 B 的访问权限。

于 2014-02-24T10:46:00.770 回答
4

您仍然需要您的测试项目来引用您的主项目。

这很容易被忽视,如果您没有现有的测试代码,这可能看起来像 InternalsVisibleTo 无法正常工作。

于 2015-11-28T22:34:11.830 回答
3

就我而言,我正在编写一个接口。由于接口只能指定公共属性,因此接口上不存在内部属性。

确保你没有做和我一样的事情!

我变了:

Assert.IsNotNull((exportFileManager)?.ThumbnailFileExporter);

到:

Assert.IsNotNull((exportFileManager as ExportFileManager)?.ThumbnailFileExporter);
于 2017-08-18T06:20:26.837 回答
1

重命名命名空间后我遇到了同样的问题。基本上 .cs 文件中的文件是新的命名空间,但 in.csprojAssemblyInfo.cs旧的命名空间。

namespace newNamespace {
   ....
}

所以,我在.csproj下面更改为新的命名空间:

    <RootNamespace>oldnamespace</RootNamespace>
    <AssemblyName>oldnamespace</AssemblyName>

在 AssemblyInfo.cs 中:

[assembly: AssemblyTitle("oldnamespace")]
[assembly: AssemblyProduct("oldnamespace")]
于 2020-10-16T07:47:27.213 回答
0

您只能将强命名程序集的内部结构暴露给另一个强命名友元程序集。但是非强命名程序集可以将内部暴露给强命名友元程序集。

于 2020-02-07T19:25:52.850 回答