我有一个类A
,它将HttpRequestHeaders
作为属性公开。被测试的课程是B
。
B
正在使用A
。 A
也是一个假类,仅用于单元测试。A
继承了一个强加HttpRequestHeaders
属性定义的接口。所以我需要替换HttpRequestHeaders
以便我可以测试B
不幸的是HttpRequestHeaders
是一个密封的类,因此它不能被NSubstitute替代:
无法从中加载“Castle.Proxies.HttpRequestHeadersProxy_2”类型 程序集'DynamicProxyGenAssembly2,Version = 0.0.0.0,Culture = neutral, PublicKeyToken = a621a9e7e5c32e69'因为父类型是密封的。
克服这种情况的一般解决方案是什么?
答案 0 :(得分:4)
我没有试图找到伪造sealed
对象的方法,而是想看看我是否可以得到一个真实的实例,假设它没有太多的依赖关系。
从好的方面来说,HttpRequestHeaders
没有太多的依赖关系。在不利方面,它只有一个internal
构造函数。但令人高兴的是,HttpRequestMessage
可以自由构建并公开Headers
属性,它将为您执行所需的构造。
或者,您可以考虑使用反射来创建对象,尽管它只有internal
构造函数 - 它会选择您的毒药时间 - 创建一个不需要的一次性对象来干净地创建标题,或者开始使用反射。 / p>
答案 1 :(得分:1)
根据您使用的Visual Studio版本,尝试Fakes(http://msdn.microsoft.com/en-us/library/hh549175.aspx)
如果您无法控制依赖项,这将非常有用。