我正在尝试使用 jMockit 来存根对 netscape.javascript.JSObject 的调用,不幸的是,这是一个包含一些本机方法的抽象类,这两种方法都不能很好地与 jMockit 配合使用。我有什么办法可以用 jMockit 或纯 java 来解决这个问题(如果可能的话,我宁愿不必引入新的库)?我试图注入模拟的代码如下所示(不要问):
JSObject win = JSObject.getWindow(this);
String someVal = (String) win.call("foo", new String[] {""});
不幸的是,我无法修改有问题的代码(再一次,不要问),所以我可以对其进行任何类型的单元测试的唯一方法是,如果我能弄清楚如何存根或以其他方式消除对JS对象。我当前的模拟实现为调用getWindow返回一个自身的新实例,并为调用返回一个常量字符串,但当然它在运行时失败并抱怨
类重新定义失败:试图更改方法修饰符
从我的研究中我发现这意味着它正在尝试模拟本机方法。
编辑:由于目标平台,我需要使用 JDK 1.5 来构建/测试,因此任何解决方案都必须在 1.5 上可行。