我正在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语句之前就已经发生错误了。
非常感谢您解决此问题的任何帮助!
答案 0 :(得分:1)
您提到您运行了许多测试,其中一些测试失败。这让我觉得您的测试存在依赖性问题,这意味着某些测试可能无法正确导入其中的 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匹配的模式。