任何Mocking Framework(如JMockit,PowerMocks)中如何模拟静态方法?

3

我了解到可以使用PowerMock和Jmockit这两种核心Java库来模拟静态方法。想简要了解它是如何在内部实现的?

我的理解是:我们在测试用例中定义模拟类(尽管在每个框架中有不同的创建模拟类方式,比如在Jmockit中使用expectation语法),这些框架必须通过自定义类加载器寻找测试用例中该类定义。这只是猜测,不确定是否正确? 但即使我是对的,类加载器的优先级是引导类加载器、应用程序类加载器和自定义类加载器。那么它如何从自定义类加载器而不是应用程序类加载器中选择?

1个回答

5
JMockit和其他新框架都基于Java 1.5 Instrumentation框架。这允许您重新定义私有、静态和final方法。甚至无参构造函数也可以被重新定义。
这些框架使用Java代理,它是一个可插拔库,嵌入在JVM中运行,并拦截类加载过程,并帮助对类的字节码进行修改。
您可以深入了解Java instrumentation和http://jmockit.googlecode.com/svn/trunk/www/about.html

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