使用JUnit测试井字棋Board类的inputBoardSize方法
测试TicTacToe中Board类的
inputBoardSize方法 先把你提供的代码片段补全(看起来你粘贴时截断了,我按常规逻辑补全catch部分):
public class Board { private Scanner scan = new Scanner(System.in); private boolean flag = true; // 假设此处有flag成员变量定义 private int boardSize; // 假设此处有boardSize成员变量定义 public int inputBoardSize() { while (flag) { System.out.print("Enter the number of grids you want to play with:"); try { boardSize = Integer.parseInt(scan.next()); if (boardSize < 3 || boardSize > 10) { System.out.println("Please choose a board size between 3 and 10"); continue; } flag = false; break; } catch (NumberFormatException e) { System.out.println("Invalid input! Please enter an integer."); // 建议添加scan.nextLine()清空输入流,避免无效值重复读取导致死循环 } } return boardSize; } }
针对这个方法,我们可以从输入合法性、边界值、异常处理、循环逻辑这几个维度设计测试用例:
一、合法输入测试
- 输入3:方法应返回3,循环终止,无错误提示输出
- 输入10:方法应返回10,循环终止,无错误提示输出
- 输入5(中间合法值):方法返回5,循环终止,无错误提示输出
二、边界外的非法数值输入
- 输入2:控制台输出
Please choose a board size between 3 and 10,循环继续等待下一次输入 - 输入11:控制台输出同样提示,循环不终止
- 输入0/负数(比如-1):同上,输出提示后保持循环状态
三、非数值输入测试
- 输入纯字符串(比如"abc"):触发
NumberFormatException,控制台输出预设的非法输入提示,循环继续 - 输入混合字符(比如"3a"):同样触发异常,输出提示后循环不终止
- 输入空字符/空格:触发异常,需确保提示正确且循环不会卡死
四、循环逻辑测试
- 先输入非法值(比如2),再输入合法值(比如4):方法最终返回4,中间仅输出一次边界错误提示
- 连续多次输入非法值(比如"xyz"→12→-5):每次都输出对应错误提示,直到输入合法值才终止循环
测试小技巧
- 单元测试时可以替换
System.in模拟用户输入,避免手动输入的麻烦。比如用ByteArrayInputStream构造模拟输入流:
@Test public void testValidInput() { String mockInput = "5\n"; System.setIn(new ByteArrayInputStream(mockInput.getBytes())); Board board = new Board(); int result = board.inputBoardSize(); assertEquals(5, result); }
- 异常处理后记得清空输入流:如果用户输入非数值,
Scanner.next()会把无效值留在缓冲区,需要用scan.nextLine()清空,否则会无限循环读取同一个无效值。 - 确认成员变量初始化正确性:
flag初始值必须为true,boardSize的初始值不影响最终返回(合法输入会覆盖它)。
内容的提问来源于stack exchange,提问作者perpetualcoder
相关产品推荐
相关产品推荐

