我希望能够使用Mockery在java中模拟File对象。我好像可能无法在java中为File创建接口。这可能吗?
编辑:
我需要在Indexer Class中测试indexDoc函数。
@Test
public void testindexDocs()
{
final File f = mockFile.mock(File.class);
File file = new File("test");
mockFile.setImposteriser(ClassImposteriser.INSTANCE);
final String[] files = {
"C:\\test\\",
"C:\\test\\test1.html",
"C:\\test\\test2",
"C:\\test\\test3.html"};
mockFile.checking(new Expectations(){
{
one(f).list();will(returnValue(files));
}
});
//TODO test if list() how many time i have called
//Document doc = HTMLDocument.Document(file); in function indexDocs
}
索引器类中的索引文档功能
private static void indexDocs(File file) throws Exception{
//Check for file to be a directory or file to be indexed look for html files and add to document
if(file.isDirectory()){
String[] files = file.list();
Arrays.sort(files);
for (int i = 0; i < files.length; i++) // recursively index them
indexDocs(new File(file, files[i]));
} else if(file.getPath().endsWith(".html") || file.getPath().endsWith("htm")){
// Get the document from HTMLDocument class which takes care of stripping of HTML tag, get the path
// of HTML file and title of HTML document.
Document doc = HTMLDocument.Document(file);
// TODO Get the book of HTML, it can be a part of HTML document class.
writer.addDocument(doc);
}
}
答案 0 :(得分:3)
不要模拟文件系统。我们在早期尝试这样做,它转移了我们使用测试来指导设计。
从快速查看代码开始,有两件事情,一个是文件导航,另一个是html剥离。也许一个选择是引入一个html剥离对象(作为协作者传入)并模拟它,然后在真实文件系统中针对示例编写测试。
答案 1 :(得分:1)
Jmock可以模拟具体的类。只是做
Mockery context = new Mockery();
context.setImposteriser(ClassImposteriser.INSTANCE);
答案 2 :(得分:0)
你遇到的问题是确切的原因,应该使用抽象而不是具体的类。