我正在开发一个多模块 Maven Java EE 项目。我们为每个模块使用带有单独配置的 Spring。我们将集成测试与相应模块的 UT 一起放置在 src/test/integration 文件夹中(比如说在 src/test/ut 中)。
在为模块 B 执行集成测试时,我们需要首先对模块 B 所依赖的模块 A 执行一些清理/初始化。这意味着:在执行模块 B 的测试时,我们需要访问模块 A 的测试数据。我为模块 B 集成测试设置了对模块 A 的集成测试的依赖关系,范围为“test”。然后在本地存储库中构建和部署 module-A-test.jar。
当模块 B 的测试被执行时,测试运行器被初始化,两个模块的 application-context.xml 都在类路径中找到。请注意,模块 A 的 application-context.xml 位于 module-A-test.jar 中,因此 jar 位于类路径中。
module-A-test.jar的结构是:
module-A-test.jar
|- sqlFile
| |-clean-module-A.sql
| |-some other sql scripts
|-module-A-db.properties
|-module-A-db-config.xml
|-module-A-IT-config.xml
模块-B的目标文件夹结构为:
classes
|- all module clases as expected
surefire-reports
|- test result reports
test-classes
|- test classes
|- sqlFile
| |-clean-module-B.sql
| |-some more sql scripts
|-module-B-db.properties
|-module-B-db-config.xml
|-module-B-IT-config.xml
我读到 Maven 测试生命周期类路径是从这些来源构建的:
- The test-classes directory
- The classes directory
- The project dependencies
- Additional classpath elements
从那我希望能够读取 clean-module-A.sql 和 clean-module-B.sql。然而,当我运行下面的代码片段时,找不到文件(即使对于模块 B),我跳出 ITException。clean-module-A.sql 当然也一样。
StringBuilder path = new StringBuilder();
path.append("sqlFile/");
path.append("clean-module-B.sql");
File file = new File(path.toString());
if (!file.exists()) {
throw new ITException("File " + file.getPath().toString() + " does not exist");
}
我希望我能正确、清楚地描述情况。
现在最后的问题是:为什么我能够在 claspath 上看到 module-B-IT-config.xml(甚至是 module-A-IT-config.xml)而不是 sql 资源?
非常感谢您对它的任何想法!
帕夫林