2011-12-23 168 views
1

您好我寫我的第一個Java應用程序,我已經有了一些測試用例(* .TC文件)我想直接通過這個腳本的應用程序:如何用Java編寫簡單的txt測試用例

for f in `ls *.tc`; do 
    echo "Current Testcase: $f" 
    x=${f%.*} 
    java Main < $x.tc > $x.out 

    if diff "$x.out" "$x.should"; then 
    echo "passed testcase $f" 
    let PASSED=PASSED+1 
    else 
    echo "failed testcase $f" 
    let FAILED=FAILED+1 
fi 
done 

問題是我不能完全弄清楚爲什麼只要tc file包含多行該應用程序發瘋。例如:quit.tc包含

quit 

和工作就像當我手動輸入「跳槽」,therfore測試用例通過。 然而,當我寫另一TC:quit2.tc包含

lala 
test 
quit 

第一命令後,應用程序退出(因爲readString功能似乎無效之後返回)。 這裏是負責讀取功能:

public String readString(){ 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String answer = null; 

try { 
    answer = br.readLine(); 
    return answer; 
} 
catch(IOException ioe) { 
    System.out.println("IO Error"); 
} 
return answer; 
} 

我不知道爲什麼,或者這個功能時,我重定向到應用程序,這似乎是問題返回null。你能幫忙,讓我可以得到的tc腳本工作? THX

+0

密切OS資源這是您的_all_代碼?您似乎沒有在測試腳本中調用'readString()'方法......並且,每次調用方法時,您都不會通過創建新讀取器來進行任何操作 - 創建的開銷可能會降低以抵消使用緩衝的任何收益。並嘗試通過調試來運行它 - 因爲try-catch,如果遇到錯誤,您仍然可以返回null。 – 2011-12-23 16:37:29

+0

從腳本的角度來看,當你的文件名中有空格時,「for循環」就會搞亂。在'* .tc'中使用''f並在變量周圍使用「」。 – 2011-12-23 16:40:39

+0

謝謝Jaypal的提示。 – wpp 2011-12-23 18:15:55

回答

3

如果你是新來的Java,你仍然塑造你的風格和處事方式,我會建議你2個提示:

1)使用Scanner讀你的輸入。 Scanner對象的使用nextLine()方法可能是您要查找的內容。

2)設計您的代碼,以便通過JUnit進行測試。

但是,在您的readString()方法中,從try塊中刪除return answer;

UPDATE:儘量實現你的功能如下:

一),則在掃描實例hasNextLine()是真實的 - >

B)調用掃描儀的實例nextLine()方法 - >

c)中解析行,看它是否等於 '退出' - >

d)執行相應邏輯if的情況。

0

您的問題是BufferedReader:它會一次讀取整個文件(出於性能原因)。

由於每次調用readString()時都會創建一個新的BufferedReader,所以第一個閱讀器會吞噬大部分文件(或全部),而第二個閱讀器會打到文件結尾。

解決的辦法是把讀者帶入一個領域,創建一次,然後始終使用相同的讀者來電readLine()

另外,你永不落幕的讀者。

Java將忘記使用的對象,但你必須正確喜歡FileInputStream小號

相關問題