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

使用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):每次都输出对应错误提示,直到输入合法值才终止循环

测试小技巧

  1. 单元测试时可以替换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);
}
  1. 异常处理后记得清空输入流:如果用户输入非数值,Scanner.next()会把无效值留在缓冲区,需要用scan.nextLine()清空,否则会无限循环读取同一个无效值。
  2. 确认成员变量初始化正确性:flag初始值必须为true,boardSize的初始值不影响最终返回(合法输入会覆盖它)。

内容的提问来源于stack exchange,提问作者perpetualcoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:57:12