我遇到与在不同来源下具有相同名称的类和包名称冲突。简而言之,目录结构看起来像这样:
src/test/java
com.service.helper
Constants.java
src/intTest/java
com.service.helper
Constants.java
com.service.utility
SomethingTest.java
两个Constants.java中定义的几个常量字符串是相同的,很少是这些类所独有的。 现在我在src / intTest / java下有一个SomethingTest.java文件,该文件应该使用在src / intTest / java下定义的Constants.java。
但是,似乎它使用的是在src / test / java包下定义的Constants.java文件。因此,我无法在src / intTest / java文件下使用Constants.java中定义的常量字符串。
有谁能说清楚为什么会如此?我是否可以真正访问在src / intTest / java下定义的Constants.java,而无需更改当前文件名的包结构?
感谢帮助。谢谢。
答案 0 :(得分:3)
Java类的标识是其“绝对”名称,如x.y.z.SomeClass
中所示。如果您有两个具有绝对相同包和类名的类,则“java”无法区分它们。
换句话说:这是不好的做法。你真的想避免这种情况。解决方案不是解决“我的工具抱怨”,而是以更符合“标准java约定”的方式组织源代码。
换句话说:最好的办法是重命名一些包,或者确保拥有唯一的类名。
答案 1 :(得分:2)
您有2个选择:
建议选择2,因为集成测试不需要与测试类位于同一个包中,因为它只测试应用程序的公共API,不需要访问任何包范围变量。 如果在您的情况下,请考虑重构您的代码以使其与良好实践保持一致,并且不要将内部状态暴露在外。将集成测试放到不同的包中有助于保持这种做法。