3

我有一个A将 aHttpRequestHeaders作为属性公开的类。被测试的类是B.

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

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

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

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

4

2 回答 2

4

与其试图找到一种方法来伪造一个sealed对象,不如看看我是否可以获得一个真实的实例,假设它没有太多的依赖关系。

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

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

于 2014-02-21T10:42:39.607 回答
1

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

如果您无法控制依赖关系,这将特别有用。

于 2014-02-21T09:52:16.347 回答