首先,我嘗試在這個很酷的站點尋找一些解決方案。我發現了一個與我的問題有關的問題,但是我的測試仍然失敗。 我發現的問題,可以在這裏找到:JUnit testing with simulated user input使用JUnit測試函數,其中函數獲取用戶輸入
讓我們來看看我的實現:
我有讀,然後驗證用戶輸入的用戶交互服務類:UserInteractionService.java
package Services;
import java.util.Scanner;
public class UserInteractionService {
private static Scanner scanner = new Scanner(System.in);
public static int readIntegerAndValidate() {
while (!scanner.hasNextInt()) {
System.out.println("It is not a valid integer number. Try again!");
scanner.next();
}
return scanner.nextInt();
}
public static double readDoubleAndValidate() {
while (!scanner.hasNextDouble()) {
System.out.println("It is not a valid number. Try again!");
scanner.next();
}
return scanner.nextDouble();
}
}
當然,我有這個服務類的測試類:UserInteractionServiceTest.java
@Test
public void userWriteInput_checkIfItIsInteger_userTypedInteger() {
String inputData = "5";
System.setIn(new ByteArrayInputStream(inputData.getBytes()));
int input = readIntegerAndValidate();
assertEquals(5, input);
}
@Test
public void userWriteDouble_checkIfItIsDouble_userTypedDouble() {
String inputData = "5.3";
System.setIn(new ByteArrayInputStream(inputData.getBytes()));
double input = readDoubleAndValidate();
assertEquals(5.3, input, 0);
}
那麼,我的第二個測試函數(userWriteDouble_checkIfItIsDouble_userTypedDouble)失敗了,我無法找到原因...正如您所看到的,我使用了與de第一次測試中相同的模式。你有什麼看法,爲什麼這個測試失敗?我應該使用一些模擬框架(Mockito)嗎?預先感謝您的答案!
故障跟蹤:
java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at Services.UserInteractionService.readDoubleAndValidate(UserInteractionService.java:21)
at Services.UserInteractionServiceTest.userWriteDouble_checkIfItIsDouble_userTypedDouble(UserInteractionServiceTest.java:23)
...
我通常會嘲笑掃描儀,是的。什麼是測試失敗輸出? – Willcodeforfun
@Willcodeforfun感謝您的評論!我用失敗追蹤編輯了我的答案。所以你說嘲笑掃描儀是個好主意。解決方案如何? – mirind4
你說第二次測試失敗了,第一次測試通過了嗎? –