我已经测试了几天前由whenNew
提供的令人难以置信的功能,这使我们能够拦截"在测试环境中的任何类的构造函数调用并返回例如。模拟给定类的实例。我想知道这背后的原理是什么?我的第一个想法是字节码操作,以便为构造函数注入适当的代码块,但是嘿 - 构造函数不会返回创建的实例,所以这显然不是答案。
那会是什么? AOP - 拦截构造函数调用并用返回给定的对象语句替换它?
答案 0 :(得分:0)
Powermock修改调用类(带new SomeMockedClass(...)
的类)中的字节码,以便它恢复并使用传递给whenNew
的模拟实例。
但这并不是模拟库可以实现的唯一方法。 JMockit也嘲笑构造函数,但是它通过修改实际的构造函数来实现(当然,它仍会返回void
。)