用途:面向 Vaadin 25 Flow 视图,引导使用 Browserless Testing(原 UI Unit Testing)编写快速、无浏览器的服务端测试。测试与 JUnit 运行在同一 JVM,无需浏览器或 Servlet 容器,速度快(毫秒级)、稳定,便于 CI。自 Vaadin 25.1 起对所有用户免费,早期版本需商业 TestBench 订阅。
适用场景与选择:视图逻辑、导航、表单校验、组件状态、数据绑定与 Binder、TDD 每次保存即跑测试等,属默认首选;登录、结账、JS/客户端行为、视觉回归、跨浏览器兼容等关键路径用端到端 TestBench。建议多写无浏览器测试,少写端到端测试。
主要能力:BrowserlessTest / SpringBrowserlessTest 基类自动搭建 Vaadin 会话、UI 与路由。navigate(ViewClass.class) 导航并返回视图实例,支持 URL 参数与路由模板参数、按路径字符串导航;test(component) 返回类型化 tester 模拟用户操作(setValue、click、selectItem、GridTester.clickRow 等),交互前会检查组件可见、启用、挂载且未被模态遮挡;$(ComponentClass.class) 查询组件,支持 first、id、all、exists 及嵌套查询。
使用方式:Maven 引入 com.vaadin:browserless-test-junit6(test 范围),Vaadin 25 + Spring Boot 4 默认 JUnit 6,API 兼容 JUnit 5。Spring Boot 项目继承 SpringBrowserlessTest 并加 @SpringBootTest,否则继承 BrowserlessTest;Quarkus 需参考 Vaadin 文档的专用基类与依赖。用 @ViewPackages 限制路由扫描包(优先 classes 数组以经受 IDE 重构),提升启动速度。商业组件(如 Chart)需在测试类实现 CommercialTesterWrappers。文档查询可用 Vaadin MCP(vaadin_version 设为 "25",ui_language 为 java);tester / ComponentQuery / @ViewPackages 精确签名请用 javadoc MCP 针对 com.vaadin:browserless-test-shared、browserless-test-junit6、browserless-test-spring 查询,而非解包 ~/.m2 中的 jar。
最佳实践与限制:视图字段应为包级私有,便于同包测试访问,避免脆弱的反射查找;每个测试聚焦一个行为,命名 action_expectedResult;用 test() 交互而非直接调用方法,因其包含可见性与启用状态检查;从用户视角断言(通知文本、导航结果、字段错误),而非内部实现。从旧 UI Unit Testing 迁移时,用 browserless-test-junit6 替换 vaadin-testbench-unit(JUnit 4)或 vaadin-testbench-unit-junit5,并将 UIUnitTest 重命名为 BrowserlessTest、SpringUIUnitTest 重命名为 SpringBrowserlessTest,测试 API 其余不变。