請檢查一下以下代碼,一個無限回圈,ASK要求輸入VALID值,但我們不給
需要創建MockObject才能讀取AskCode,否則用戶必須手動輸入資料。 之后,必須檢查它是否有效或必須再次發出請求。
問題:
Mock Objects
用戶可以參與測驗嗎? (掃描資料)
我們如何使assertEquals用于資料陣列?
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);
}
}
uj5u.com熱心網友回復:
我們想測驗Master Mind游戲的一些連接。使用模擬物件來掃描那些必須引入的變數,因此我們知道用戶的所有動作。但是對于此測驗,我們還必須知道程式生成的秘密字,因此我們考慮自己引入秘密字,但是我們不知道如何使程式通過模擬物件不呼叫generateSecretWord函式來對其進行介紹。uj5u.com熱心網友回復:
用戶參與測驗,那就是測驗程式和用戶互動唄具體不知道你的用戶想怎么參與測驗,就你的代碼而言,你可以把String mockCode = "1 2 3 4 5"; 以下的代碼讓用戶自己輸入
Scanner usc = new Scanner();
System.out.println("請輸入測驗資料:") ;
String mockCode = usc.nextLine(); //讓用戶自己輸入資料
至于assertEquals用于資料陣列,方法很多,處理你自己用回圈的方式,還可以把陣列轉成String來比較,或者轉成集合用集合的containsAll方法之類的
比如,轉成String的方式
assertEquals(Arrays.toString(testCode), Arrays.toString(game.getCodeTry()));
uj5u.com熱心網友回復:
請問上面通過mock Object,不呼叫generateSecretWord的問題能幫忙回答一下嗎?謝謝uj5u.com熱心網友回復:
【我們考慮自己引入秘密字】你這個秘密字是怎么來的?你要先弄清楚generateSecretWord后生成的密碼字保存在哪里,然后用你自己的密碼字替換自動生成的密碼字不就好了嗎?
比如
int[] gameCode = {1,3,3,2,5};
game.secretWord.setSecretWord(gameCode); //推測可能這里會呼叫generateSecretWord生成密碼字,那它的結果保存在哪?如果保存在game.secretWord的話你直接改掉game.secretWord就好了。或者如果你知道generateSecretWord方法和int[] gameCode = {1,3,3,2,5};的關系,把gameCode引數改成你期待的值就好了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/208534.html
標籤:Eclipse
上一篇:Java
下一篇:JNA呼叫dll檔案的問題
