如何在任何模拟框架中模拟静态方法,如JMockit,PowerMocks?

时间:2011-10-01 10:58:09

标签: java mocking

我了解到我们可以使用带有PowerMock的核心java库来模拟静态方法吗?Jmockit.Want可以在内部了解它是如何做到的?

我的理解: - 我们在测试用例本身中定义了mock类(尽管在每个框架中都有不同的方法来创建模拟类,比如在Jmockit中使用期望语法),这些框架必须定义自定义类加载器在测试用例本身内寻找那个类定义。这是一个猜测。不确定它是否正确?但即使我是对的,classloader hirerchy的首选项是boootstraploader然后是applicationclassloader而不是customerclassloader。 那么它如何从customerclassloader而不是applicationclassloader中选择?

1 个答案:

答案 0 :(得分:5)

JMockit和其他更新的框架基于Java 1.5 Instrumentation框架。这允许您重新定义私有,静态和最终方法。甚至可以重新定义no-arg构造函数。

这些框架使用Java代理,它是一个可插入的库,可以嵌入在JVM中运行并拦截类加载过程,并可以帮助检测类的字节码。

您可以深入检查Java工具和http://jmockit.googlecode.com/svn/trunk/www/about.html