###如下部分为实现测试类
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---");
}
}