加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 你可以单元测试混淆代码吗?

发布时间:2020-12-14 05:59:36 所属栏目:Java 来源:网络整理
导读:我希望在我们现有的Ant构建脚本中混淆我们的 Java Web应用程序代码,但是遇到了关于单元测试的问题.我在代码编译之后,在jar编辑之前和运行单元测试之前混淆了代码. 但是,如果我混淆了我的生产代码而不是我的测试代码,那么我的所有测试都会失败,因为他们试图调
我希望在我们现有的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>

因为混淆器改变了测试的名称.

我可以在生成的.war / .ear文件上运行混淆器,但是我想让我们的单元测试针对修改后的代码运行,以驱除混淆器引起的任何错误.

我目前正在与Zelix KlassMaster合作,但我仍然处于评估阶段,所以如果他们能够更好地工作,我会接受其他选择.

解决方法

你能告诉它运行混淆器,以便它有效地重构代码,包括测试的引用(即当生产名称改变时,测试代码改变它的引用)但不要混淆测试本身(即不要改变它测试类的名称或方法)?鉴于以前对混淆器的经验,我希望能够工作.

例如,假设我们有未经过模糊处理的来源:

public class ProductionCode
{
    public void productionMethod() {}
}

public class ProductionCodeTest
{
    public void testProductionMethod()
    {
        new ProductionCode().productionMethod();
    }
}

您想要设置混淆器的选项以使其有效:

public class Xyzzy
{
    public void ababa() {}
}

public class ProductionCodeTest
{
    public void testProductionMethod()
    {
        new Xyzzy(). ababa();
    }
}

这样你的“运行测试”Ant任务应该能够保持不变,因为测试的API没有改变 – 只是方法的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读