2012-11-26 70 views
8

所以,问题是我的程序集中有一堆内部类,这些类是我想测试的类使用的。由于访问器已从VS2012中删除,所以我很好地使用了[InternalsVisibleTo],这很好用......除非我试图使我的内部类类化时,它们对于Fakes框架是不可见的。我还应该注意到,我正在处理的特定类是一个带有静态方法的静态类,并且我并不想重构所有使用接口(和使用存根)的所有东西,因为组织中的阻力与重构的水平有关。如何使用Fakes Framework垫片模拟/隔离VS 2012中的内部类?

有没有办法使这些内部成员可以在Visual Studio 2012中使用垫片上下文而不需要使用任何接口(字面上)?

回答

20

以下页面介绍如何使内部类型对生成的假货组件可见。 http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

它说:

假货代码生成器将生成垫片类型和存根类型为将所生成的伪造品组装可见的类型。要使填充程序集的内部类型对Fakes和您的测试程序集可见,请将InternalsVisibleToAttribute属性添加到提供给生成的Fakes程序集和测试程序集的可见程度的填充程序集代码。

[assembly: InternalsVisibleTo("FileSystem.Fakes")] 
[assembly: InternalsVisibleTo("FileSystem.Tests")] 

您还需要一个InternalsVisibleToAttribute允许从靶组件内部类型测试组件的访问。换句话说,你需要:

[assembly: InternalsVisibleTo("TargetAssembly.Fakes")] 
[assembly: InternalsVisibleTo("TestAssembly")] 
+0

它确实说,但是当我试过这个,我的内部接口没有出现。我只能获取公共接口的存根。我知道最初的问题是关于垫片 - 你是否能够将它用于存储内部接口? –

+2

我们正在更新MSDN页面。您还需要一个InternalsVisibleToAttribute来允许您的测试程序集访问来自目标程序集的内部类型。换句话说,你需要: [assembly:InternalsVisibleTo(“TargetAssembly.Fakes”)] [assembly:InternalsVisibleTo(“TestAssembly”)] –

+4

该错误的msdn页面的重要提示:'The Fakes框架使用相同的密钥签署所有生成assemblies',所以公钥签署是否应始终'公钥= 0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc'如果您已登录的东西!我永远需要抓住这个! –

相关问题