使用Maven构建Domino XPages应用并执行JUnit测试遇问题求助
解决Domino XPages OnDiskProject Maven测试用例未找到问题
核心原因分析
org.openntf.junit.xsp的测试依赖Domino XPages容器运行,并非普通本地JUnit测试;domino-nsf打包类型的资源结构和普通Java项目差异较大,maven-surefire-plugin默认的类路径扫描、本地执行逻辑无法适配这种特殊环境。
具体解决思路
1. 调整测试类的部署位置
- 将测试类从
src/test/java移至src/main/java或src/main/resources/WEB-INF/classes目录下,确保domino-nsf插件打包时能将测试类纳入NSF的WEB-INF/classes中。 - 确认测试类添加了
@RunWith(OpenNTFJUnit4ClassRunner.class)注解,符合org.openntf.junit.xsp的运行要求。
2. 利用HTTP请求触发容器内测试
测试必须在Domino服务器的XPages环境中运行,无法通过本地surefire直接执行,需在NSF部署完成后,通过HTTP请求触发测试页面并解析结果:
- 使用
exec-maven-plugin或maven-antrun-plugin,在integration-test阶段调用curl、wget或自定义Java工具,发送请求到测试页面(例如http://your-domino-server/your-app.nsf/OpenNTFJUnitTest.xsp?runAllTests)。 - 示例exec-maven-plugin配置(假设测试页面在失败时返回非200状态码,或支持JSON格式结果):
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>execute-xpages-tests</id> <phase>integration-test</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>curl</executable> <arguments> <argument>-f</argument> <!-- HTTP请求失败或测试失败时返回非0退出码,终止Maven构建 --> <argument>http://your-domino-host/your-app.nsf/OpenNTFJUnitTest.xsp?runAllTests&format=json</argument> </arguments> </configuration> </execution> </executions> </plugin>
- 如果测试页面不返回错误状态码,可编写简单脚本解析返回的HTML/JSON内容,判断是否存在失败用例,再让Maven根据脚本退出码决定构建是否失败。
3. 排查NSF打包内容
解压生成的.nsf文件,检查WEB-INF/classes目录下是否存在测试类的.class文件:
- 若不存在,需调整domino-nsf插件的配置,添加对
src/test/java目录的资源包含规则,例如在插件配置中增加:
<plugin> <groupId>org.frostillic.us.maven</groupId> <artifactId>domino-nsf-maven-plugin</artifactId> <version>...</version> <configuration> <resources> <resource> <directory>src/test/java</directory> <targetPath>WEB-INF/classes</targetPath> <includes> <include>**/*.class</include> </includes> </resource> </resources> </configuration> </plugin>
4. 单独测试模块的修正方案
若坚持使用单独测试模块:
- 将测试模块打包为jar,在主模块的domino-nsf插件配置中,添加测试jar作为依赖,确保其被复制到NSF的WEB-INF/lib目录。
- 主模块部署完成后,同样通过HTTP请求触发测试,逻辑同步骤2。
内容的提问来源于stack exchange,提问作者MLO
相关产品推荐
相关产品推荐

