跳转到正文
← 返回学习板块
项目文档 · 设备运维工单平台

工单项目运行与验收

编译运行步骤、预期输出、验收清单和常见问题。

项目文档目录 · 4 篇
本篇目录

返回项目首页 · 需求 · 设计

核对日期:2026-10-13。

1. 环境和编译 #

当前没有第三方依赖。需要安装 JDK,命令行能够找到 java 和 javac。本次验证环境为 Windows PowerShell、Temurin JDK 8(1.8.0_472)。后续计划在 Maven 阶段统一 JDK 21。

在项目根目录打开终端,检查:

java -version
javac -version

编译全部源文件:

New-Item -ItemType Directory -Force -Path out | Out-Null
$sourceFiles = (Get-ChildItem -LiteralPath .\src -Filter '*.java').FullName
javac -encoding UTF-8 -d out $sourceFiles

编译应无错误。若失败,先修复错误再运行,避免误跑上次编译留下的旧 class。每次修改源码后重新编译。

IDEA 运行时选择对应类的 main;文件 Demo 的 Working directory 应设为项目根目录(即包含 src 的 JavaProject 目录),两个 Demo 要一致。

2. 工单服务演示 #

java '-Dfile.encoding=UTF-8' -cp out TicketServiceDemo

预期输出:

IN_PROGRESS, 20
状态必须是OPEN
IN_PROGRESS, 20
OPEN, null
清空前:1
结果列表:0
重新查询:1
重新查询标题:打印机卡纸
是否同一对象:true

它验证了首次派单、重复派单失败后原数据保留、另一张工单不受影响、结果列表独立以及列表元素引用共享。

3. 单张工单文件演示 #

TicketFileDemo 会覆盖工作目录中的 ticket-demo.properties。已有需要保留的记录时,先复制备份,或在单独的练习目录运行。它保存的是代码里构造的示例工单,不是服务集合。

确认可覆盖示例文件后,在项目根目录先运行:

java '-Dfile.encoding=UTF-8' -cp out TicketFileDemo

预期包含:

1001
投影仪无信号
IN_PROGRESS
处理人:[20]
保存成功:<工作目录>\ticket-demo.properties

随后读取:

java '-Dfile.encoding=UTF-8' -cp out TicketLoadDemo

预期包含:

读取文件:<工作目录>\ticket-demo.properties
编号:1001
标题:投影仪无信号
状态:IN_PROGRESS
处理人:20

这些结果从恢复后的 Ticket 对象 getter 取得,证明该单张工单的编号、标题、状态和处理人已恢复。

4. 验收清单 #

下面区分已运行的当前 Demo 和应补充为自动化测试的场景。没有把所有清单项都算作本次通过。

场景预期本次文档整理验证
编译所有 src/*.java编译成功通过
派单给 20 后再次派给 30第二次失败,仍为 IN_PROGRESS / 20TicketServiceDemo 通过
清空筛选结果后重新查询服务里的待处理工单仍存在TicketServiceDemo 通过
修改筛选结果中的工单服务查询得到修改后的同一对象TicketServiceDemo 通过
保存后读回中文、状态与处理人中文一致,IN_PROGRESS,处理人 20两个文件 Demo 在临时目录运行通过
标题 null、空白、50/51 长度边界非法值拒绝,合法值接受;失败不改旧值需整理为可重复自动化测试
添加 null、重复编号拒绝且不覆盖原记录需整理为可重复自动化测试
查询不存在编号、无匹配状态、null 状态分别为 null、空列表、异常需整理为可重复自动化测试
派给 0 或负数拒绝且保持原状态和处理人需整理为可重复自动化测试
完整加载多张工单数量、编号、标题、状态、处理人一致功能待实现
恢复入口的合法与非法参数检查状态和处理人组合,沿用编号、标题校验助手临时程序 21 项检查通过
文件缺字段、非法枚举或非法编号当前代码会抛出异常,不返回合法工单已有检查逻辑;尚未逐项验证坏文件加载路径
多条存档中重复编号及加载失败保护报告错误,不污染服务或覆盖原存档功能待实现
首次运行没有存档按约定初始化空服务功能待实现;当前 Demo 打印读取失败

文件保存演示在独立临时目录中验证,未覆盖项目现有的示例存档。随后对象恢复阶段重新编译全部源码,运行项目现有存档读取,读取前后哈希一致;21 项恢复检查在助手创建的临时程序中完成。当前仓库主要依靠 main 演示,没有 JUnit 测试套件;这些 Demo 不能代替完整的回归测试。

5. 常见问题 #

找不到文件 #

先看 TicketLoadDemo 打印的绝对路径。检查是否先运行保存 Demo,以及保存和读取时的工作目录是否一致。

中文乱码 #

先区分源文件、存档内容、IDE 显示和终端显示。当前文件读写代码已经显式使用 UTF-8。IDEA 的 Properties 文件编码也应按 UTF-8 查看;不要在乱码状态下另存覆盖原文件。终端字体或编码问题需要单独排查,修改项目路径不会替代文件编码设置。

读到 null 或空处理人 #

getProperty 缺少对应键时返回 null;文件中 assigneeId= 表示键存在但值为空字符串。二者含义不同。当前 Demo 拒绝缺字段,将空处理人转为 null,再由 Ticket.restore 检查其是否符合工单状态。

异常后仍继续执行了后面的代码 #

throw 会中断当前执行路径;如果外层 catch 捕获了异常,程序可以继续执行 catch 后面的代码。两个文件 Demo 在 IOException 的 catch 中写了 return,所以读写失败时不会继续打印成功结果。

← 浏览全部课程回到顶部 ↑