我正在处理的程序涉及处理文件内容。现在我正在编写jUnit测试以确保事情按预期工作。作为这些测试的一部分,我想引用一个内联文本文件来定义特定测试的范围。
我如何访问这样的文件?
- 让我澄清一下: 通常,在打开文件时,您需要指明文件的位置。我想说的是“在这个项目中”。这样,当其他人查看我的代码时,他们也可以访问同一个文件。我可能错了,但是没有特殊的方法,可以访问属于“this”项目的文件,相对于“磁盘上的某些文件”。
答案 0 :(得分:2)
如果你的意思是你有一个文件,你需要你的测试能够读取,如果你将文件复制到类路径中,你的测试可以使用Class.getResourceAsStream()读取它。
举个例子试试这个链接(Jon Skeet回答了这样的问题):
答案 1 :(得分:1)
您还可以为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,您可以使用它(或类似的东西,heh)来准确输入想要测试的字符串。您不需要资源或磁盘文件。
这里我使用我的lame类作为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());