MissingPropertyException,即使它已导入

时间:2016-10-11 14:00:47

标签: groovy

我正在Groovy中进行一些集成测试。有几百个测试,我的任务是删除硬编码的ID,以支持带有常量的单个文件。对于大约500个文件,一切都按预期工作(Thanks,grep和sed):硬编码的ID已被替换为常量:

package com.example.package.tests;

class SomeTest extends BaseGroovyTest { 

    @Test
    public void testSomething() {           
        def merchantId = "1234"

        ...
    }
}

package com.example.package.tests;
import com.example.package.util.ConstantMerchants

class SomeTest extends BaseGroovyTest { 

    @Test
    public void testSomething() {           
        def merchantId = ConstantMerchants.MERCHANT_A

        ...
    }
}

ConstantMerchants

package com.example.package.util;

public final class ConstantMerchants {

    public static final String MERCHANT_A = "1234";
    public static final String MERCHANT_B = "1111";
    public static final String MERCHANT_C = "2222";
    public static final String MERCHANT_D = "3333";
    ...

    private ConstantMerchants() { }

}

但是,虽然某些文件已成功更改(因此硬编码的ID已替换为对ConstantMerchants的引用并导入了ConstantMerchants),但由于错误,他们的测试无法运行:

  

groovy.lang.MissingPropertyException:没有这样的属性:类的ConstantMerchants:com.example.package.tests.SomeTest

我已多次检查过,对文件的唯一修改是添加ConstantMerchants的导入工作站,并用ConstantMerchants对应项替换字符串ID。 / p>

删除import语句,然后通过按 Ctrl + Shift + O (组织导入)使eclipse添加它会产生相同的文件我在删除import语句之前就已经发生错误了。

非常感谢您解决此问题的任何帮助!

2 个答案:

答案 0 :(得分:1)

您提到您运行了许多测试,其中一些测试失败。这让我觉得您的测试存在依赖性问题,这意味着某些测试可能无法正确导入其中的 ConstantMerchants 类。 执行以下操作:

  • 尝试更改类 ConstantMerchants 位置,其中所有测试都可以访问该类。

您应该检查的另一件事是您的IDE同步:

  • 删除构建目录。
  • 重建项目。

检查是否有帮助。

不,然后检查IDE的任何其他同步问题。

如果它不起作用,请尝试另一件事: 检查您的构建工具是否有一些限制或以最佳方式运行所需的任何环境变量。

并执行以下操作:

  • 删除构建目录
  • 执行项目库的同步。
  • 重新运行该项目。 大部分时间它都很有效,可以帮助消除这个错误。

我希望它有所帮助。

答案 1 :(得分:0)

显然,我的测试使用的类(...)使用的类所使用的某个类引用了ConstantMerchants但未正确导入它。

由于某种原因,编译器认为这是使用链末尾的类的错误所以它一直说我的测试缺少引用,而实际上它是几层深度的一些util类。将导入添加到该文件可以解决问题。

我终于通过grepping包含ConstantMerchants但不包含import语句的文件找到了这个。如果有人有兴趣,我的grep命令是:

grep -L -e "import .*ConstantMerchants" $(grep -E -f /mnt/c/Data/search_replaced.txt * -rclH)

其中search_replaced.txt包含一些与替换ID匹配的模式。