如何创建模拟对象

3
我的问题是如何创建模拟对象,而不是使用库创建模拟对象。
我查看了 Mockito 库的源代码,但我不理解其实现方式。我在互联网上搜索过,但这些文章只是解释什么是模拟对象以及如何使用库创建它们。
对于动态编程语言来说,可能很简单,因为我们可以更改方法和变量,但在静态编程语言(例如 Java)中该如何实现呢?

这要看情况。从使用cglib动态创建类到使用Proxy,都可以实现。这个问题太宽泛了。 - Boris the Spider
我真的不确定你所说的Java作为一种动态语言是什么意思。 - thefourtheye
是的,你能定义一下静态语言和动态语言之间的区别吗? - Boris the Spider
实际上,静态语言的方法比动态语言的方法更难进行存根/模拟。你不是说Java是动态语言吧? :) - Cristik
@Cristik 谢谢,我已经纠正了。 - Hunsu
1个回答

1
让我们从mock的定义开始:它是一个对象,你可以在其上设置关于方法调用、参数以及调用次数的期望。

为了模拟某些依赖关系而不必使用真正的代码(在很多情况下这是有问题的/危险的,比如处理支付网关),mock被发送到被测试的对象中。

由于mock需要拦截所有(或一部分,在部分mock的情况下)方法的调用,因此可以根据语言提供的功能实现多种方式。特别是在Java中,可以通过代理类来实现:https://dev59.com/Z3NA5IYBdhLWcg3wH6EW#1082869,这种方法在依赖性方面强制你(但是是好的)使用接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接