Nat*_*and 6 java ant obfuscation
我希望在我们现有的Ant构建脚本中混淆我们的Java Web应用程序代码,但是遇到了关于单元测试的问题.我在代码编译之后,在jar编辑之前和运行单元测试之前混淆了代码.
但是,如果我混淆了我的生产代码而不是我的测试代码,那么我的所有测试都会失败,因为他们试图调用不再存在的方法,因为它们已被混淆器重命名.我可以将某些方法标记为不混淆,以便外部系统(例如我们的测试套件)可以使用它们,但由于我们正在为高单位测试覆盖率进行拍摄,因此我们需要将所有方法标记为不可篡改.
如果我也混淆了测试类,我会遇到两个问题:
1:生产类和测试类合并到同一个输出目录中,我无法从生产.jar文件中排除测试类
2:我无法运行正常的Ant批处理调用:
<batchtest todir="${basedir}/reports">
<fileset dir="${basedir}/components/common/build-zkm">
<include name="**/*Test.class"/>
</fileset>
</batchtest>
Run Code Online (Sandbox Code Playgroud)
因为混淆器改变了测试的名称.
我可以在生成的.war/.ear文件上运行混淆器,但是我想让我们的单元测试针对修改后的代码运行,以驱除混淆器引起的任何错误.
我目前正在与Zelix KlassMaster合作,但我仍然处于评估阶段,所以如果他们能够更好地工作,我会接受其他选择.
您能否告诉它运行混淆器,以便它有效地重构代码,包括来自测试的引用(即,当生产名称更改时,测试代码更改其引用),但不混淆测试本身(即,不更改测试类的名称或其方法)?鉴于以前使用混淆器的经验,我希望它能起作用。
例如,假设我们有未混淆的来源:
public class ProductionCode
{
public void productionMethod() {}
}
public class ProductionCodeTest
{
public void testProductionMethod()
{
new ProductionCode().productionMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要设置混淆器的选项以使其有效:
public class Xyzzy
{
public void ababa() {}
}
public class ProductionCodeTest
{
public void testProductionMethod()
{
new Xyzzy(). ababa();
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您的“运行测试”Ant 任务应该能够保持不变,因为测试的 API 没有改变 - 只是方法的实现。
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |