如何用Java编写简单的txt测试用例
您好我写我的第一个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
如果你是新来的Java,你仍然塑造你的风格和处事方式,我会建议你2个提示:
1)使用Scanner读你的输入。 Scanner对象的使用nextLine()方法可能是您要查找的内容。
2)设计您的代码,以便通过JUnit进行测试。
但是,在您的readString()
方法中,从try块中删除return answer;
。
UPDATE:尽量实现你的功能如下:
一),则在扫描实例hasNextLine()是真实的 - >
B)调用扫描仪的实例nextLine()方法 - >
c)中解析行,看它是否等于 '退出' - >
d)执行相应逻辑if
的情况。
您的问题是BufferedReader
:它会一次读取整个文件(出于性能原因)。
由于每次调用readString()
时都会创建一个新的BufferedReader
,所以第一个阅读器会吞噬大部分文件(或全部),而第二个阅读器会打到文件结尾。
解决的办法是把读者带入一个领域,创建一次,然后始终使用相同的读者来电readLine()
另外,你永不落幕的读者。
Java将忘记使用的对象,但你必须正确喜欢FileInputStream
小号
密切OS资源这是您的_all_代码?您似乎没有在测试脚本中调用'readString()'方法......并且,每次调用方法时,您都不会通过创建新读取器来进行任何操作 - 创建的开销可能会降低以抵消使用缓冲的任何收益。并尝试通过调试来运行它 - 因为try-catch,如果遇到错误,您仍然可以返回null。 – 2011-12-23 16:37:29
从脚本的角度来看,当你的文件名中有空格时,“for循环”就会搞乱。在'* .tc'中使用''f并在变量周围使用“”。 – 2011-12-23 16:40:39
谢谢Jaypal的提示。 – wpp 2011-12-23 18:15:55