如何修复Dec2Hex转换程序的JUnit单元测试使其适配Jenkins自动执行
你当前的测试逻辑仅调用了Dec2Hex的main方法执行,未添加任何执行结果校验,所以不管程序运行结果是否符合要求,测试都会默认显示通过,这是目前最核心的问题。你可以参考以下方向自行完善:
可测试性改造方向(推荐,不破坏原有逻辑)
不要把所有逻辑耦合在main方法中,拆分核心功能为独立的公共静态方法,每个方法可以单独编写JUnit断言校验:
- 拆分参数长度校验方法,返回布尔值标识参数是否合法
- 拆分输入字符串转整数方法,返回包装类型
Integer,转换失败返回null,不直接依赖静态变量Arg1存储结果 - 拆分十进制转十六进制的逻辑方法,输入合法整数直接返回转换后的十六进制字符串,不直接打印到控制台
- 针对每个拆分后的方法编写独立的测试用例,用JUnit的断言方法(比如
assertEquals、assertTrue等)校验返回结果是否符合预期
不修改原Dec2Hex代码的测试方案
如果要求不能改动原有业务代码,可以通过捕获控制台输出来做结果校验:
- 每个测试场景单独编写一个带
@Test注解的测试方法,不要把所有测试逻辑都塞在同一个测试方法中,方便后续定位失败场景 - 测试执行前重定向
System.out到字节数组输出流,执行完main方法后读取输出内容,和预期输出做匹配断言 - 针对任务5的两个要求单独写用例:
- 无参数场景:调用
Dec2Hex.main(new String[]{}),校验输出是否包含No input detected,同时确认程序无异常抛出 - 非整数输入场景:调用
Dec2Hex.main(new String[]{"asdasd"}),校验输出是否包含Value must be a positive Int,同时确认程序不会抛出NumberFormatException异常、正常结束运行
- 无参数场景:调用
- 补充合法输入的验证用例,比如输入16,校验输出是否包含预期的十六进制转换结果
Jenkins集成注意点
- 配置Maven或Gradle构建脚本,绑定JUnit 5测试执行插件,确保执行
mvn test或gradle test命令时会自动运行所有测试用例 - 只要有任意一个测试用例执行失败,构建命令就会返回非0的退出码,Jenkins默认会将返回非0退出码的作业标记为失败,完全符合作业要求
内容的提问来源于stack exchange,提问作者MrShiver
相关产品推荐
相关产品推荐

