微软伪造框架 - 我不能使用内部类

时间:2016-02-16 15:04:37

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

我遇到了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。 请帮帮我。

2 个答案:

答案 0 :(得分:0)

可能您应该粘贴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

答案 1 :(得分:0)

有点奇怪我只是复制了你的问题,而且肯定它起初并没有在假装配中产生内部结构。我按照以下步骤操作,它甚至开始为其他命名空间工作:

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

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