我的问题是我正在尝试与其jar文件包含模糊字节代码的Java应用程序互操作。该应用程序会在一个月左右发布更新,当它们发布时,大多数类和方法名称都会更改。
因此,这里提出的方法:
http://rickyclarkson.blogspot.com/2006/07/duck-typing-in-java-and-no-reflection.html
或
Simulating duck typing in Java
在我的解决方案中不起作用,因为我每次都必须手动更新接口。
然而,我所做的是从反混淆的类名< - >中自动生成(大部分)映射。通过以下形式解析调用日志记录调用的调用类文件来模糊类名:
logger.log(severity, "ClassName", "MethodName() has some error")
我生成的是这样的:
public final static String MyRealName = "someObfuscatedName".
public final static String MyRealName_myCoolMethod = "someMethodName".
我有一个相当不错的解决方案,通过反射API与“myRealName”的对象进行交互,并简单地代理实现它所代理的对象的功能子集的对象。有点像这样:
class MyRealName {
private Object backingObject;
public MyRealName(Object o) { backingObject = o;}
public void myCoolMethod() {
return getFieldValue(backingObject
, DeobNames.MyRealName_myCoolMethod);
}
}
然而,当我想在没有混淆的应用程序运行时测试我的代码时会出现问题 - 启动时间和设置可能需要几分钟,而我希望测试验证只需几秒钟。
我正在寻找的方法是轻松调整我的测试以适应我的代码所依赖的频繁更改的类名。
我对JMockit之类的工具的强大感兴趣,因为他们能够为我自动生成模拟对象,我希望能够拥有一些薄层,使我能够拥有我的大多数模拟生成非常容易,因为必须手动编写所有内容,每次更新。
答案 0 :(得分:0)
如果您正在运行Java代码,我认为这不可行。
但是,如果您使用Groovy运行代码,则可以使用Groovy的methodMissing
请参阅:http://groovy.codehaus.org/Using+methodMissing+and+propertyMissing