首页 / 知识
关于单元测试:如何模拟Sealed类?
2023-04-11 22:22:00

How do you mock a Sealed class?模拟密封课程可能会很痛苦。 我目前更喜欢使用Adapter模式来处理此问题,但是大约有些感觉很奇怪。 那么,模拟密封类的最佳方法是什么? 非常欢迎Java的答案。 实际上,我希望Java社区已经对此进行了较长的处理,并且可以提供很多帮助。 但是,这里有一些.NET意见:
对于.NET,您可以使用TypeMock之类的东西,它使用概要分析API,并允许您挂接对几乎所有内容的调用。 我相信Microsoft Research的Moles可以帮助您做到这一点。从"痣"页面:
更新:即将发布的VS 11版本中有一个名为" Fakes"的新框架,旨在取代Moles:
我的一般经验法则是,我需要模拟的对象也应该有一个公共接口。我认为这是正确的设计方式,并且使测试容易得多(通常,如果执行TDD,通常会得到此结果)。有关此问题的更多信息,请参阅Google Testing Blog最新文章(请参阅第9点)。 另外,在过去的四年中,我主要从事Java工作,我可以说一方面可以指望我创建最终(密封)类的次数。这里的另一个规则是,我应该总是有一个很好的理由来密封一个类,而不是默认情况下密封它。 TypeMock的问题在于它会为不良设计辩解。现在,我知道它通常隐藏着其他人的不良设计,但是允许它进入您的开发过程可以很容易地导致允许您自己的不良设计。 我认为,如果要使用模拟框架,则应使用传统框架(如Moq),并在不可模拟的事物周围创建隔离层,然后模拟隔离层。 我几乎总是避免在代码中深入依赖外部类。相反,我宁愿使用适配器/网桥与他们交谈。这样,我就在处理我的语义,翻译的痛苦被隔离在一个类中。 从长远来看,这也使切换我的依赖关系变得更加容易。
我最近遇到了这个问题,在阅读/搜索网络之后,似乎没有简单的方法可以使用上面提到的其他工具。
尽管它目前仅在beta版本中可用,但我认为值得牢记新的Fakes框架(Visual Studio 11 Beta版本的一部分)的填充功能。
我个人当时正在使用它来模拟密封框架类(例如DrawingContext)上的方法。 模拟密封类是完全合理的,因为许多框架类都是密封的。 就我而言,我试图模拟.Net的MessageQueue类,以便可以TDD我优美的异常处理逻辑。 如果有人对如何克服Moq关于"不可覆盖成员上的无效设置"的错误有任何想法,请告诉我。 码:
我通常采用创建接口和适配器/代理类的途径来简化密封类型的模拟。但是,我还尝试过跳过接口的创建,并使代理类型不与虚拟方法密封。当代理实际上是封装并使用密封类的用户部分的自然基类时,此方法很好用。 在处理需要这种适应的代码时,我厌倦了执行相同的操作来创建接口和代理类型,因此我实现了一个库来自动执行任务。 该代码比您所引用的文章中的示例要复杂得多,因为它可以生成程序集(而不是源代码),可以在任何类型上执行代码生成,并且不需要太多配置。 有关更多信息,请参阅此页面。 有没有一种方法可以从接口实现密封类并模拟接口呢? 我内心有些感觉,一开始就有密封的类是错误的,但这就是我自己:) |
最新内容
相关内容
python单元测试中的函数整理
python单元测试中的函数整理,培训,环境,测试,方法,函数,单元,条件,实例,里面,以上,python单元测试中的函数整理1、setUp准备环境。执行每个测自定义WPF命令模式示例
自定义WPF命令模式示例,自定义WPF命令模式示例,命令模式,编程,示例,都是,Custom WPF command pattern example我已经完成了一些WPF编关于单元测试:如何使初级程序员编写
关于单元测试:如何使初级程序员编写测试?,关于单元测试:如何使初级程序员编写测试?,试了,程序员,你写,有一个,How to make junior progra关于许可:许可模式
关于许可:许可模式,关于许可:许可模式,应用程序,职业生涯,客户,解决方案,License Models在我几乎所有的职业生涯中,我都致力于构建解决JavaScript严格模式的限制
JavaScript严格模式的限制,JavaScript,严格,模式,的,限制,严格,模式,的,, 严格模式的限制 不允许使用未声明的变量:"use strict"JavaScript 变量,严格模式,变量的
JavaScript 变量,严格模式,变量的有效期,JavaScript,变量,严格,模式,的,有效期,JavaScript,,JavaScript 变量,严格模式,变量的有效