2012-07-25 50 views
1

我正在做測試驅動的開發,它要求我爲從用戶接收輸入的類編寫測試函數。由於控制檯輸入函數在測試期間停止輸入,我使用一個使用字符串的InputStream編寫測試。來自InputStream的掃描儀輸入

String str="3\n2\n1\n4\n"; 
InputStream is = new ByteArrayInputStream(str.getBytes()); 
assertTrue(app.RunApp(is)); 

這導致調用函數getChoice(InputStream i),該函數涉及來自Scanner的控制檯輸入。

public int getChoice(InputStream i) throws IOException { 
     Scanner s=new Scanner(i); 
     s.useDelimiter("\n"); 
     String y= s.next(); 
     int x=Integer.parseInt(y); 
     return x; 
    } 

我希望上面的代碼將字符串中的數字一個接一個。但是,正在發生的事情是,它會正確使用第一個數字,然後,流的位置將直接導向流的末尾,從而導致NoSuchElementException。請幫忙!

回答

0

使用...

String y = s.nextLine(); // That will take the entire line instead of only 1st word