58,454
社区成员
发帖
与我相关
我的任务
分享
package MasterMindTQSProject;
import static org.junit.Assert.*;
import org.junit.Test;
public class GameTest {
MockMyScanner sc = new MockMyScanner();
MyScanner nsc = new MyScanner();
Game game = new Game(sc);
@Test
public void testAskNumTriesDefault() {
int testTries = 10;
assertEquals(testTries,game.getTries());
}
@Test
public void testAskNumTriesCustomized() {
int testTries = 15;
game.sc.setNewInt(15);
game.proxyAskTries();
assertEquals(testTries,game.getTries());
}
@Test
public void testSelectModeDefault() {
int testLengthTest = 5;
int testMinValue = 1;
int testTries = 10;
game.sc.setNewInt(1); //Game mode
game.selectMode();
assertEquals(testLengthTest, game.secretWord.getWord_length());
assertEquals(testMinValue, game.secretWord.getMin_number());
assertEquals(testTries, game.getTries());
}
@Test
public void testSelectModeCustomized() {
int testLengthTest = 4;
int testMinValue = 5;
int testTries = 15;
game.sc.setNewInt(2); //Game mode
game.sc.setNewInt(testLengthTest); //WordLength
game.sc.setNewInt(testMinValue); //MinValue
game.sc.setNewInt(testTries); //Tries
game.selectMode();
assertEquals(testLengthTest, game.secretWord.getWord_length());
assertEquals(testMinValue, game.secretWord.getMin_number());
assertEquals(testTries, game.getTries());
}
//@Test
//我们发现一个无限循环,因为ASK要求输入VALID值,而我们不给它们
/* *需要创建MockObject才能读取AskCode,否则用户必须手动输入数据。 之后,必须检查它是否有效或必须再次发出请求。
问题:
Mock Objects
用户可以参与测试吗? (扫描数据)
我们如何使assertEquals用于数据数组?*/
public void testInsertCode() {
int []testCode = {1,2,3,4,5};
int []testCodeError1 = {1,2,8,4,5};
int []testCodeError2 = {1,2,3,4,5,4};
int []testCodeError3 = {1,2,3,4};
int []testCodeError4 = {1,2,3,4,-9};
String mockCode = "1 2 3 4 5";
game.sc.setNewCode(mockCode);
game.askCode();
for (int i = 0; i < 5; i++) {
assertEquals(testCode[i], game.getCodeTry()[i]);
}
mockCode = "1 2 8 4 5";
game.sc.setNewCode(mockCode);
game.askCode();
for (int i = 0; i < 5; i++) {
assertNotEquals(testCode[i], game.getCodeTry()[i]);
}
mockCode = "1 2 3 4 5 4";
game.sc.setNewCode(mockCode);
game.askCode();
for (int i = 0; i < 5; i++) {
assertNotEquals(testCode[i], game.getCodeTry()[i]);
}
mockCode = "1 2 3 4";
game.sc.setNewCode(mockCode);
game.askCode();
for (int i = 0; i < 5; i++) {
assertNotEquals(testCode[i], game.getCodeTry()[i]);
}
mockCode = "1 2 3 4 -9";
game.sc.setNewCode(mockCode);
game.askCode();
for (int i = 0; i < 5; i++) {
assertNotEquals(testCode[i], game.getCodeTry()[i]);
}
}
/*//@Test
public void testInsertCodeRangeDefault() {
int codeOK[] = new int [] {1,2,3,4,5};
int codeNotOKLow[] = new int [] {1,2,3,4,5,6};
int codeNotOKHigh[] = new int [] {1,2,3,4,5,6};
game.codeInRange(code);
assertEquals(code.size,game.secretWord.getWord_length());
}
//@Test
public void testInsertCodeRangeCustomized() {
game.codeInRange();
assertEquals(code.size,game.secretWord.getWord_length());
}
//@Test
public void testInsertCodeLengthDefault() {
int codeOK[] = new int [] {1,2,3,4,5};
int codeNotOKLow[] = new int [] {1,2,3,4,5,6};
int codeNotOKHigh[] = new int [] {1,2,3,4,5,6};
game.codeInRange(code);
assertEquals(code.size,game.secretWord.getWord_length());
}
//@Test
public void testInsertCodeCustomized() {
int codeOK[] = new int [] {1,2,3,4,5};
int codeNotOKLow[] = new int [] {1,2,3,4,5,6};
int codeNotOKHigh[] = new int [] {1,2,3,4,5,6};
game.codeInRange(code);
assertEquals(code.size,game.secretWord.getWord_length());
}*/
@Test
public void testCorrectPosition() {
int correctPosition;
String testCode = "1 2 3 4 5";
game.sc.setNewCode(testCode);
game.askCode();
game.secretWord.setMin_number(1);
game.secretWord.setWord_length(5);
int[] gameCode = {1,2,3,4,5};
game.secretWord.setSecretWord(gameCode);
correctPosition = game.getNumbersCorrectPosition();
assertEquals(5, correctPosition);
int[] gameCode2 = {1,2,3,4,4};
game.secretWord.setSecretWord(gameCode2);
correctPosition = game.getNumbersCorrectPosition();
assertEquals(4, correctPosition);
}
@Test
public void testAproxNumbers() {
int correctPosition;
String testCode = "1 2 3 4 5";
game.sc.setNewCode(testCode);
game.askCode();
game.secretWord.setMin_number(1);
game.secretWord.setWord_length(5);
int[] gameCode = {1,3,3,2,5};
game.secretWord.setSecretWord(gameCode);
correctPosition = game.getAproxNumbers();
assertEquals(2, correctPosition);
int[] gameCode2 = {1,4,5,2,5};
game.secretWord.setSecretWord(gameCode2);
correctPosition = game.getAproxNumbers();
assertEquals(3, correctPosition);
}
}
public void selectMode() {
int mode = 0;
do{
System.out.println("Choose an option ");
System.out.println("[1] Default mode");
System.out.println("[2] Customized mode");
System.out.print("Option selected: ");
//this.sc = new Scanner(System.in);
mode = sc.nextInt();
switch(mode) {
case 1:
this.secretWord = new SecretWord();
this.secretWord.generateSecretWord(this.secretWord.getWord_length(), this.secretWord.getMin_number());
break;
case 2:
int length;
int minValue;
System.out.print("Insert the length of the secret word: ");
length = sc.nextInt();
System.out.print("Insert the minimum value of the secret word: ");
minValue = sc.nextInt();
this.secretWord = new SecretWord(length,minValue);
askTries();
this.secretWord.generateSecretWord(length, minValue);
break;
default:
System.out.print("This is not a correct option");
break;
}
}while(mode != 1 && mode != 2);
}
就是不知道怎么知道生成的SecretWord是来自哪里,不知道怎么才能手动输入?