Jmock Mockery, высмеивающий объект файловой системы - PullRequest
2 голосов
/ 04 февраля 2011

Я хочу иметь возможность смоделировать объект File в Java, используя Mockery.Мне кажется, что мы не можем создать интерфейс для файла в Java.Возможно ли это?

РЕДАКТИРОВАТЬ:

Мне нужно проверить функцию 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  
}

Функция Index Docs в классе индексатора

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);
  }
}

Ответы [ 3 ]

3 голосов
/ 06 февраля 2011

Не издевайтесь над файловой системой. Мы пытались сделать это в первые дни, и это отвлекло нас от использования тестов для руководства дизайном.

При быстром рассмотрении вашего кода происходит две вещи: одна - навигация по файлам, другая - разбор HTML. Возможно, одним из вариантов было бы ввести html-разборный объект (переданный как соавтор) и смоделировать это, а затем написать тесты для примеров в реальной файловой системе.

1 голос
/ 04 февраля 2011

Jmock может издеваться над конкретными классами.Просто сделай

Mockery context = new Mockery();

context.setImposteriser(ClassImposteriser.INSTANCE);
0 голосов
/ 06 февраля 2011

Проблемы, которые возникают у вас, являются точной причиной, следует использовать абстракции, а не конкретные классы.

...