我正在處理的程序涉及處理文件內容。現在我正在編寫jUnit測試以確保事情按預期工作。作爲這些測試的一部分,我想引用一個內聯文本文件來定義特定測試的範圍。如何使用Java訪問嵌入式文本文件?
我如何訪問這樣的文件?
- 讓我澄清: 通常,打開文件時,您需要指出文件的位置。我想說的是「在這個項目中」。這樣,當別人看我的代碼時,他們也可以訪問同一個文件。我可能是錯的,但沒有特殊的方法,可以訪問屬於「this」項目的文件,相對於「磁盤上的某些文件」。
我正在處理的程序涉及處理文件內容。現在我正在編寫jUnit測試以確保事情按預期工作。作爲這些測試的一部分,我想引用一個內聯文本文件來定義特定測試的範圍。如何使用Java訪問嵌入式文本文件?
我如何訪問這樣的文件?
- 讓我澄清: 通常,打開文件時,您需要指出文件的位置。我想說的是「在這個項目中」。這樣,當別人看我的代碼時,他們也可以訪問同一個文件。我可能是錯的,但沒有特殊的方法,可以訪問屬於「this」項目的文件,相對於「磁盤上的某些文件」。
如果你的意思是你有一個文件,你需要測試才能讀取,如果你將文件複製到類路徑中,你的測試可以使用Class.getResourceAsStream()讀取它。
舉一個例子嘗試此鏈接(喬恩斯基特回答這樣一個問題):
非常好。謝謝。 – JAM 2010-09-17 16:03:46
您也可以實現自己的測試類的InputStream或你有什麼。
package thop;
import java.io.InputStream;
/**
*
* @author tonyennis
*/
public class MyInputStream extends InputStream {
private char[] input;
private int current;
public MyInputStream(String s) {
input = s.toCharArray();
current = 0;
}
public int read() {
return (current == input.length) ? -1 : input[current++];
}
@Override
public void close() {
}
}
這是一個簡單的InputStream。你給它一個字符串,它給你的字符串。如果你想測試的代碼需要一個InputStream,你可以使用這個(或類似的東西,呵呵)來準確地輸入想要測試的字符串。你不需要資源或磁盤文件。
在這裏,我用我的跛腳類作爲輸入轉換成BufferedInputStream ...
package thop;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
*
* @author tonyennis
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
InputStream is = new MyInputStream("Now is the time");
BufferedInputStream bis = new BufferedInputStream(is);
int res;
while((res = bis.read()) != -1) {
System.out.println((char)res);
}
}
}
現在,如果你要確保你的程序正確解析InputStream的,你是金色的。你可以餵它你想測試的字符串,沒有任何困難。如果你想確保被測試的類總是關閉InputStream,添加一個「isOpen」布爾實例變量,在構造函數中將其設置爲true,在close()中將其設置爲false,並添加一個getter。
現在你的測試代碼將包括類似:
MyInputStream mis = new MyInputStream("first,middle,last");
classBeingTested.testForFullName(mis);
assertFalse(mis.isOpen());
內嵌文件?第一次聽到,你能否請你詳細說明一下。 – 2010-09-17 15:53:46
我在頂部添加了說明 – JAM 2010-09-17 16:00:25