2019-11-08-基于TDD实现的java版本的保龄球规则(测试类)

###如下部分为实现测试类

package ideal4j.imp.bigscreen.dailypattern.utils.test.tdd.bowlingGame;

import junit.framework.TestCase;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.util.Arrays;

/**

* @Author: Jolly

* @Date: 2019/11/5 0005 18:52

* @Project: demo

* @Version: 1.0

* @Description: 这里是基于TDD规则完成保龄球案例的一个测试用例类

*/

public class BowlingBowlingGameTestextends TestCase {

private static Loggerlogger = LoggerFactory.getLogger(BowlingBowlingGameTest.class);

private BowlingGamebowlingGame;

/**

    * @desc: 此处的setUp()方法是固有写法,名称不可随意变更

    * setup 主要实现测试前的初始化工作

    */

    @Before

    public void setUp()throws Exception {

logger.info("---初始化---");

//第一次重构

        bowlingGame =new BowlingGame();

}

/**

    * @desc: tearDown()方法是固有写法,名称不可随意变更

    * teardown 主要实现测试完成后的垃圾回收等工作

    */

    @After

    public void tearDown()throws Exception {

logger.info("---垃圾回收---");

bowlingGame =null;

}

@Test

    public void testGutterGame()throws Exception {

logger.info("---testGutterGame START---");

//重构后,此处可以直接使用game对象

        BowlingGame bowlingGame =new BowlingGame();

logger.info("---testGutterGame END---");

}

/**

    * @desc : roll点20次零个球

    */

    @Test

    public void testGutterGameALLZeroScore()throws Exception {

logger.info("---testGutterGameALLZeroScore START---");

//每轮,丢两次,最大数量是20?

        for (int i =0; i <20; i++) {

// 重构后,此处可以直接使用game对象

            bowlingGame.roll(0);

}

assertEquals(0,bowlingGame.score());

logger.info("---testGutterGameALLZeroScore END---");

}

/**

    * @desc : roll点20次1个球

    */

    @Test

    public void testGutterGameALLOneScore()throws Exception {

logger.info("---testGutterGameALLOneScore START---");

for (int i =0; i <20; i++) {

// 重构后,此处可以直接使用game对象

            bowlingGame.rollV2(1);

}

assertEquals(20,bowlingGame.scoreV2());

logger.info("---testGutterGameALLOneScore END---");

}

//第三次重构,计算多次roll点相同的情况

    private void rollMany(int n,int count) {

for (int i =0; i < n; i++) {

bowlingGame.rollV2(count);

}

}

//第四次重构,考虑出现STRIKE或者SPARE相同的情况

    private void rollManyV4(int n,int count) {

for (int i =0; i < n; i++) {

bowlingGame.rollV4(count);

}

}

/**

    * @desc : roll点20次零个球(重构roll点方法,roll-rollMany)

*/

    @Test

    public void testGutterGameTwentyZeroScore()throws Exception {

logger.info("---testGutterGameTwentyZeroScore START---");

rollMany(20,0);

assertEquals(0,bowlingGame.scoreV2());

logger.info("---testGutterGameTwentyZeroScore END---");

}

/**

    * @desc : roll点20次一个球(重构roll点方法,roll-rollMany)

*/

    @Test

    public void testGutterGameTwentyOneScore()throws Exception {

logger.info("---testGutterGameTwentyOneScore START---");

rollMany(20,1);

assertEquals(20,bowlingGame.scoreV2());

logger.info("---testGutterGameTwentyOneScore END---");

}

/**

    * @desc : roll点一次Strike

*/

    @Test

    public void testGutterGameOneStrikeScore()throws Exception {

logger.info("---testGutterGameOneStrikeScore START---");

bowlingGame.rollV4(10);//满足Strike,得分需要额外加上下一次前两球得分

        bowlingGame.rollV4(6);

bowlingGame.rollV4(2);

//此处计算得分,第一轮10满足Strike 10+额外8 18分,第二轮6+2,8分,一共18+8 26分

        rollManyV4(17,0);

assertEquals(26,bowlingGame.scoreV4());

logger.info("---testGutterGameOneStrikeScore END---");

}

/**

    * @desc : roll点一次Strike-最后一轮出现

    */

    @Test

    public void testGutterGameLastOneStrikeScore()throws Exception {

logger.info("---testGutterGameLastOneStrikeScore START---");

rollManyV4(18,0);

bowlingGame.rollV4(10);//满足Strike,得分需要额外加上下一次前两球得分

        bowlingGame.rollV4(6);

bowlingGame.rollV4(2);

assertEquals(18,bowlingGame.scoreV4());

logger.info("---testGutterGameLastOneStrikeScore END---");

}

/**

    * @desc : roll点一次Spare-最后一轮出现

    */

    @Test

    public void testGutterGameLastOneSpareScore()throws Exception {

logger.info("---testGutterGameLastOneSpareScore START---");

rollManyV4(18,0);

bowlingGame.rollV4(8);

bowlingGame.rollV4(2);//满足Spare,得分需要额外加上下一次前两球得分

        bowlingGame.rollV4(4);

assertEquals(14,bowlingGame.scoreV4());

logger.info("---testGutterGameLastOneSpareScore END---");

}

/**

    * @desc : roll点一次Spare

*/

    @Test

    public void testGutterGameOneSpareScore()throws Exception {

logger.info("---testGutterGameOneSpareScore START---");

//此处出现Spare,7和3,二者均有可能在前,就是7在前3在后或者3在前7在后都是合理的

        bowlingGame.rollV4(7);

bowlingGame.rollV4(3);//满足Spare,得分需要额外加上下一次第一球得分

        bowlingGame.rollV4(6);

rollManyV4(17,0);

//此处计算得分,第一轮7+3满足Spare 10+额外6 16分,第二轮6+0,6分,一共16+6 22分

        assertEquals(22,bowlingGame.scoreV4());

logger.info("---testGutterGameOneSpareScore END---");

}

/**

    * @desc : 正常roll点一次,不出现strike和spare

*/

    @Test

    public void testGutterGameOneNormalScore()throws Exception {

logger.info("---testGutterGameOneNormalScore START---");

bowlingGame.rollV4(5);

bowlingGame.rollV4(3);//一次正常roll点

        rollManyV4(18,0);

assertEquals(8,bowlingGame.scoreV4());

logger.info("---testGutterGameOneNormalScore END---");

}

/**

    * @desc : roll点两次,一次正常一次STRIKE

*/

    @Test

    public void testGutterGameNormaStrikeScore()throws Exception {

logger.info("---testGutterGameNormaStrikeScore START---");

bowlingGame.rollV4(10);

bowlingGame.rollV4(6);

bowlingGame.rollV4(1);

rollManyV4(17,0);

assertEquals(24,bowlingGame.scoreV4());

logger.info("---testGutterGameNormaStrikeScore END---");

}

/**

    * @desc : roll点两次,一次正常一次SPARE

*/

    @Test

    public void testGutterGameNormaSpareScore()throws Exception {

logger.info("---testGutterGameNormaSpareScore START---");

bowlingGame.rollV4(9);

bowlingGame.rollV4(1);

bowlingGame.rollV4(6);

bowlingGame.rollV4(1);

rollManyV4(16,0);

assertEquals(23,bowlingGame.scoreV4());

logger.info("---testGutterGameNormaSpareScore END---");

}

/**

    * @desc : 正常roll点两次,不出现strike和spare

*/

    @Test

    public void testGutterGameTwoNormalScore()throws Exception {

logger.info("---testGutterGameTwoNormalScore START---");

bowlingGame.rollV4(5);

bowlingGame.rollV4(3);

bowlingGame.rollV4(6);

bowlingGame.rollV4(1);

rollManyV4(16,0);

assertEquals(15,bowlingGame.scoreV4());

logger.info("---testGutterGameTwoNormalScore END---");

}

/**

    * @desc : 正常roll点三次,正常,Strike或者Spare.

*/

    @Test

    public void testGutterGameThreeCaseStrikeScore()throws Exception {

logger.info("---testGutterGameThreeCaseStrikeScore START---");

bowlingGame.rollV4(6);

bowlingGame.rollV4(2);

rollManyV4(14,0);

bowlingGame.rollV4(6);

bowlingGame.rollV4(1);

bowlingGame.rollV4(6);

bowlingGame.rollV4(4);//spare,追加一球

        bowlingGame.rollV4(6);

assertEquals(31,bowlingGame.scoreV4());

logger.info("---testGutterGameThreeCaseStrikeScore END---");

}

public void testGutterGameThreeCaseSpareScore()throws Exception {

logger.info("---testGutterGameThreeCaseSpareScore START---");

bowlingGame.rollV4(5);

bowlingGame.rollV4(3);

rollManyV4(14,0);

bowlingGame.rollV4(6);

bowlingGame.rollV4(1);

bowlingGame.rollV4(10);//spare,追加两球

        bowlingGame.rollV4(4);

bowlingGame.rollV4(3);

assertEquals(32,bowlingGame.scoreV4());

logger.info("---testGutterGameThreeCaseSpareScore END---");

}

public void testGutterGameSummaryCaseSpareScore()throws Exception {

logger.info("---testGutterGameThreeCaseSpareScore START---");

bowlingGame.rollV4(1);

bowlingGame.rollV4(4);

bowlingGame.rollV4(4);

bowlingGame.rollV4(5);

bowlingGame.rollV4(6);

bowlingGame.rollV4(4);//SPARE

        bowlingGame.rollV4(5);

bowlingGame.rollV4(5);//SPARE

        bowlingGame.rollV4(10);//STRIKE

        bowlingGame.rollV4(0);

bowlingGame.rollV4(1);

bowlingGame.rollV4(7);

bowlingGame.rollV4(3);//SPARE

        bowlingGame.rollV4(6);

bowlingGame.rollV4(4);//SPARE

        bowlingGame.rollV4(10);//STRIKE

        bowlingGame.rollV4(2);

bowlingGame.rollV4(8);//第十轮出现SPARE,多打一次球.

        bowlingGame.rollV4(6);//

        assertEquals(133,bowlingGame.scoreV4());

logger.info("---testGutterGameThreeCaseSpareScore END---");

}

/**

    * @desc : 过度式,省略中间循序重构过程,

    */

    @Test

    public void testGutterGameSummaryStrikeScore()throws Exception {

logger.info("---testGutterGameSummaryStrikeScore STAR---");

bowlingGame.rollSummary(1);

bowlingGame.rollSummary(4);

bowlingGame.rollSummary(4);

bowlingGame.rollSummary(5);

bowlingGame.rollSummary(6);

bowlingGame.rollSummary(4);//SPARE

        bowlingGame.rollSummary(5);

bowlingGame.rollSummary(5);//SPARE

        bowlingGame.rollSummary(10);//STRIKE

        bowlingGame.rollSummary(0);

bowlingGame.rollSummary(1);

bowlingGame.rollSummary(7);

bowlingGame.rollSummary(3);//SPARE

        bowlingGame.rollSummary(6);

bowlingGame.rollSummary(4);//SPARE

/*game.rollSummary(10);//STRIKE

game.rollSummary(2);

        game.rollSummary(8);//第十轮出现SPARE,多打一次球.

game.rollSummary(6);//*/

        bowlingGame.rollSummary(5);

bowlingGame.rollSummary(3);

bowlingGame.rollSummary(10);//第十轮出现STRIKE,多打两次球.

        bowlingGame.rollSummary(6);

bowlingGame.rollSummary(2);

logger.info("rollSummary:" + Arrays.toString(bowlingGame.rollSummary));

logger.info("currentRound:" +bowlingGame.getCurrentRound());

for (int i =0; i <11; i++) {

bowlingGame.scoreSummary(i);

bowlingGame.scoreSummary =bowlingGame.scoreSummary(i);

logger.info("game.scoreSummary:" +bowlingGame.scoreSummary);

}

//此处计算得分

        assertEquals(118,bowlingGame.scoreSummary);

logger.info("---testGutterGameSummaryStrikeScore END---");

}

/**

    * @desc : 过度式,省略中间循序重构过程,

    */

    @Test

    public void testGutterGameSummarySpareScore()throws Exception {

logger.info("---testGutterGameSummarySpareScore STAR---");

bowlingGame.rollSummary(1);

bowlingGame.rollSummary(4);

bowlingGame.rollSummary(4);

bowlingGame.rollSummary(5);

bowlingGame.rollSummary(6);

bowlingGame.rollSummary(4);//SPARE

        bowlingGame.rollSummary(5);

bowlingGame.rollSummary(5);//SPARE

        bowlingGame.rollSummary(10);//STRIKE

        bowlingGame.rollSummary(0);

bowlingGame.rollSummary(1);

bowlingGame.rollSummary(7);

bowlingGame.rollSummary(3);//SPARE

        bowlingGame.rollSummary(6);

bowlingGame.rollSummary(4);//SPARE

        bowlingGame.rollSummary(10);//STRIKE

        bowlingGame.rollSummary(2);

bowlingGame.rollSummary(8);//第十轮出现SPARE,多打一次球.

        bowlingGame.rollSummary(6);//

/*bowlingGame.rollSummary(5);

bowlingGame.rollSummary(3);

        bowlingGame.rollSummary(10);//第十轮出现STRIKE,多打两次球.

bowlingGame.rollSummary(6);

bowlingGame.rollSummary(2);*/

        logger.info("rollSummary:" + Arrays.toString(bowlingGame.rollSummary));

logger.info("currentRound:" +bowlingGame.getCurrentRound());

for (int i =0; i <11; i++) {

bowlingGame.scoreSummary(i);

bowlingGame.scoreSummary =bowlingGame.scoreSummary(i);

logger.info("game.scoreSummary:" +bowlingGame.scoreSummary);

}

//此处计算得分

        assertEquals(133,bowlingGame.scoreSummary);

logger.info("---testGutterGameSummarySpareScore END---");

}

}

你可能感兴趣的:(2019-11-08-基于TDD实现的java版本的保龄球规则(测试类))