TDD实战(六)“井字游戏” 需求四

虫师 创建于 over 6 years 之前

最后更新: about 1 month 之前

阅读数: 1

TDD实战(六)“井字游戏” 需求四

需求4


如果出现平局如何处理。

所有格子都占满则为平局。

测试用例1


可以通过填满棋盘的所有格子测试平局结果。

@Test
public void whenAllBoxesAreFilledThenDraw(){
    ticTacToe.play(1,1);  //X
    ticTacToe.play(1,2);  //O
    ticTacToe.play(1,3);  //X
    ticTacToe.play(2,1);  //O
    ticTacToe.play(2,3);  //X
    ticTacToe.play(2,2);  //O
    ticTacToe.play(3,1);  //X
    ticTacToe.play(3,3);  //O
    String actual = ticTacToe.play(3,2); //X
    assertEquals("The result is draw", actual);
}
实现测试1

检查是否为平局非常简单 --- 只需要检查是否已占满整个棋盘,所以,可以通过遍历数组board实现。

public String play(int x, int y){
    checkAxis(x);
    checkAxis(y);
    lastPlayer = nextPlayer();
    setBox(x, y, lastPlayer);
    if(isWin()){
        return lastPlayer + " is the winner";
    }else if(isDraw()){
        return "The result is draw";
    }else {
        return "No winner";
    }
}

private boolean isDraw(){
    for(int x = 0; x < SIZE; x++){
        for(int y = 0; y < SIZE; y++){
            if(board[x][y] == '\0'){
                return false;
            }
        }
    }
    return true;
}

** 执行 测试用例1 检查它是否运行通过。

** 执行 所有测试用例 检查它们是否全部运行通过。

重构


虽然 isWin()方法与最后的个测试无关,但也可以重构。

我们无须检查所有获胜条件,只需要判断与最后一个棋子的位置相关的获胜条件。

优化isWin()方法如下:

public String play(int x, int y){
    checkAxis(x);
    checkAxis(y);
    lastPlayer = nextPlayer();
    setBox(x, y, lastPlayer);
    if(isWin(x, y)){                  // 传参x,y 给isWin()方法
        return lastPlayer + " is the winner";
    }else if(isDraw()){
        return "The result is draw";
    }else {
        return "No winner";
    }
}

……

// 优化isWin()处理逻辑
private boolean isWin(int x, int y){
    int playerTotal = lastPlayer * SIZE;
    char horizontal, vertical, diagonal1, diagonal2;
    horizontal = vertical = diagonal1 = diagonal2 = '\0';
    for(int i = 0; i < SIZE; i++){
        horizontal += board[i][y - 1];
        vertical += board[x - 1][i];
        diagonal1 += board[i][i];
        diagonal2 += board[i][SIZE - i - 1];

    }
    if(horizontal == playerTotal ||
            vertical == playerTotal ||
            diagonal1 == playerTotal ||
            diagonal2 == playerTotal){
        return true;
    }
    return false;
}

** 执行 所有测试用例 检查它们是否全部运行通过。

到此,“井字游戏” 通过TDD模式开发完成。

0

相关课程

webium简明教程
图文
webium简明教程

课程分类: 测试框架

开箱即用的page object模式

  • 已完结
  • 已更新8集
  • 最后更新时间: 2024-03-18 12:48:12

免费

查看详情
TestNG教程
图文
TestNG教程

课程分类: 测试框架

Java语言中最流行的测试框架了

  • 已完结
  • 已更新12集
  • 最后更新时间: 2024-03-18 12:55:14

免费

查看详情
python unittest测试框架教程
图文
python unittest测试框架教程

课程分类: 测试框架

python 自带的单元测试框架

  • 已完结
  • 已更新8集
  • 最后更新时间: 2024-03-18 12:12:46

免费

查看详情
博客合集
图文
博客合集

课程分类: 测试工具 软件测试基础

当年的一些博文

  • 已完结
  • 已更新154集
  • 最后更新时间: 2024-03-19 22:02:16

免费

查看详情
软件测试基础教程
图文
软件测试基础教程

课程分类: 软件测试基础

转码和转行必备

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-18 11:40:05

免费

查看详情
软件测试入门教程
图文
软件测试入门教程

课程分类: 软件测试基础

新人如何转码到软件测试

  • 已完结
  • 已更新9集
  • 最后更新时间: 2024-03-17 11:07:23

免费

查看详情