繁体   English   中英

替换密封的班级

[英]Substitute a sealed class

我有一个A类,它将HttpRequestHeaders作为属性公开。 被测试的班级是B

  • B正在使用A
  • A也是一个仅用于单元测试的假类。
  • A继承那些强加的定义的接口HttpRequestHeaders财产。

所以我需要替换HttpRequestHeaders以便我可以测试B不幸的是HttpRequestHeaders是一个密封的类因此它不能被NSubstitute替代:

无法从程序集“DynamicProxyGenAssembly2,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = a621a9e7e5c32e69”加载类型“Castle.Proxies.HttpRequestHeadersProxy_2”,因为父类型已被密封。

克服这种情况的一般解决方案是什么?

我没有试图找到一种伪造sealed对象的方法,而是想看看我是否能得到一个真实的实例,假设它没有太多的依赖关系。

HttpRequestHeaders方面来说, HttpRequestHeaders没有太多依赖项。 在不利方面,它只有一个internal构造函数。 但令人高兴的是, HttpRequestMessage可以自由构建并公开一个Headers属性,它将为您执行所需的构造。

或者,您可以考虑使用反射创建对象,尽管它只有internal构造函数 - 它会选择您的毒药时间 - 创建一个不需要的一次性对象来干净地创建标题,或者开始使用反射。

根据您使用的Visual Studio版本,请尝试Fakes( http://msdn.microsoft.com/en-us/library/hh549175.aspx

如果您无法控制依赖项,则此功能尤其有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM