【问题标题】:Microsoft Fakes Framework - I can't use internal classMicrosoft Fakes Framework - 我无法使用内部类
【发布时间】:2016-02-16 15:04:36
【问题描述】:

我对 Fakes Framework 和内部类有疑问。 我刚刚阅读并使用了这里的建议:How to mock/isolate internal classes in VS 2012 with Fakes Framework shims?

但是,我仍然看不到内部类。

我有这个解决方案: ACQTool(类库项目) ACQTool.UnitTests(测试项目)

在 ACQTool 命名空间中有 ACQTool.Utils 内部类。

在 ACQTool/AssemblyInfo.cs 我添加了以下几行:

[assembly: InternalsVisibleTo("ACQTool.UnitTests, PublicKey=57ad8399-13fd-4d4d-90fd-c521c2164d25")]
[assembly: InternalsVisibleTo("ACQTool.Fakes, PublicKey=0024..47bc")]
[assembly: InternalsVisibleTo("Microsoft.QualityTools.Testing.Fakes, PublicKey=0024..47bc")]

构建后,我可以在测试类中使用 ACQTool.Utils,但不存在 ACQTool.Fakes.ShimUtils/StubUtils。 请帮帮我。

【问题讨论】:

  • 您有0024..47bc有效公钥吗?
  • 是的,我用的是从 MSDN 页面截取的,我也试过我的 plublickey,但没有解决方案

标签: c# unit-testing .net-assembly microsoft-fakes


【解决方案1】:

这有点奇怪,我只是复制了你的问题,而且一开始它肯定没有在 Fake 程序集中生成内部结构。我按照以下步骤操作,它甚至对其他命名空间也开始工作:

  • 在命名空间Utils 下添加一个公共类。
  • 重建测试项目,内部将开始显示。
  • 删除该公共类并重新构建。

我从 Utils 命名空间中删除了所有内容并添加了新的内部类,从那时起它工作正常。 这只是生成包含内部结构的命名空间的一种解决方法。

【讨论】:

  • 我的命名空间是“ACQTool”。我有一个“Utils.cs”类:内部类 Utils、公共枚举 LogSeveriry、公共类 DisabledEvents、公共静态类扩展。我可以看到除 Utils 之外的所有情况
【解决方案2】:

可能您应该粘贴由 sn.exe 工具生成的公钥。 通常它存储在类似的地方:

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\sn.exe"

从命令行调用它:

sn.exe -p SomeName.snk SomeName.PublicKey
sn.exe -tp SomeName.PublicKey

并将输出粘贴到“InternalsVisibleTo”公钥参数。

我错过的那个 msdn 页面的重要说明:Fakes 框架使用相同的密钥对所有生成的程序集进行签名,因此签名时的公钥应该始终是 PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92de‌​cb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977c‌​b98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daab‌​c862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb‌​687947bc

【讨论】:

  • 我已经按照这个程序,但是结果没有改变
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2018-11-01
  • 1970-01-01
相关资源
最近更新 更多