代码之家  ›  专栏  ›  技术社区  ›  Nathan Voxland

你能对模糊代码进行单元测试吗?

  •  6
  • Nathan Voxland  · 技术社区  · 17 年前

    我希望在现有的Ant构建脚本中混淆Java web应用程序代码,但在单元测试方面遇到了问题。在编译代码之后、jar编译之前和单元测试运行之前,我正在混淆代码。

    全部的 我们的方法是不可混淆的。

    1:生产类和测试类被合并到同一个输出目录中,我无法从production.jar文件中排除测试类

     <batchtest todir="${basedir}/reports">
          <fileset dir="${basedir}/components/common/build-zkm">
               <include name="**/*Test.class"/>
          </fileset>
     </batchtest>
    

    我可以在生成的.war/.ear文件上运行模糊处理程序,但我希望对修改后的代码运行单元测试,以消除由模糊处理程序引起的任何错误。

    我目前正在与Zelix KlassMaster合作,但我仍处于评估阶段,因此如果其他选择效果更好,我会愿意接受。

    3 回复  |  直到 17 年前
        1
  •  7
  •   TofuBeer    13 年前

    我用 yguard

    here 看来你可以)。

    但是,我建议您执行以下操作:

    1. jar未混淆的文件(如果需要)
    2. 如果他们通过了测试,那么就对模糊文件进行模糊处理
    3. 测试模糊文件

        2
  •  3
  •   Jon Skeet    17 年前

    包括…在内 来自测试的引用(即当产品名称更改时,测试代码更改其引用),但不混淆测试本身(即不更改测试类或其方法的名称)?考虑到以前使用模糊处理程序的经验,我认为这是可行的。

    例如,假设我们有一个未模糊的来源:

    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();
        }
    }
    

        3
  •  0
  •   Carl Manaster    14 年前

    混淆器不应更改您的公用呼叫。看起来yo应该在混淆之前运行其他测试,因为它们检查内部功能,这些功能在混淆之后不应该更改。

    如果是这样,为什么不运行调用公共功能的测试呢?您所需要做的就是为这些调用创建一个单独的类,并使用模糊代码重新构建它,然后运行该dll。

    推荐文章