惩戒在C#非虚拟方法(Mocking non-virtual methods in C#)

2019-06-24 18:13发布

我想测试一些课程,我用嘲笑制作,但我已经看到在C#中的所有免费嘲弄框架不能嘲笑非虚方法(如果它不是在一个接口)。

但是,有TypeMock谁能够做到这一点,所以这是可能的。 谁能告诉该怎么办呢? 我甚至可以尝试,如果我能得到这个做贡献的开源框架。

提前致谢

Answer 1:

我来自Typemock,和(为什么人们不希望用最好的工具的工作虽然它超出了我),我不会解决“太强大了”的评论。

下面是Typemock隔离器是如何工作的。 你曾经使用过性能分析器? 隔离是一个分析器。 它挂接到CLR和试运行的时间内,它改变的方法。 当一个方法获取实时编译的,它改变它,因此该方法运行时,在执行原来的代码之前,它问:我应该运行它原本打算,如果没有,我该怎么办? 而且由于这种特定的技术,它可以模拟任何.NET方法和技术。 而已。

当您使用API​​设置的行为,该问题的答案现在变成野趣,并改变在该方法的运行期的行为。 很简单,但在幕后它的很多工作:)

隔离带有一个加载项VS使内VS无缝地运行测试,并在构建服务器的命令行工具和的MSBuild或恶性任务使用。

我会很高兴回答你的任何其他问题。



Answer 2:

据该网站 ,它使用AOP来重定向呼叫:

Typemock隔离器采用面向方面的技术重定向从实际的代码调用。 这使开发人员能够限定用于测试方案所需的外部组件的行为。 例如,您可以模拟通过指示Typemock隔离器写入到数据库时抛出OutOfDiskSpaceException写入到数据库时磁盘已满。 这是几乎是不可能的测试,而不Typemock隔离的情况。 开发人员定义在实际单元测试的行为和Typemock隔离器自动隔离所有所需的组件。

这种方法需要您设置一个特殊的环境,然后才能运行测试或使用VS插件。

有些人认为,嘲笑一切的能力使得Typemock 太厉害了 ,因为你不必考虑这么多优秀的设计。 从A报价Ayende :

模拟型的主要弱点是它的力量,它让我采取我不想走捷径,我希望得到一个系统,低耦合,高凝聚力。

但是,当然,因为他是犀牛模拟的创世他是不客观的:)

我会认为你是在工作的很大,如果你想创建具有此功能的模拟框架,所以我会建议要么购买Typemock,或学习代码,而无需吧:)



文章来源: Mocking non-virtual methods in C#