You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:05:26