2013-09-11 2 views
1

У меня проблема с макетом, когдаNew (File.class) с использованием PowerMockito. Вот мой метод, который я хочу, чтобы проверить:powerMockito mock Файловые объекты

public void foo() { 
    File tmpFile = new File("Folder"); 
    if (!tmpFile.exists()) { 
     if (!configFolder.mkdir()) { 
      throw new RuntimeException("Can't create folder"); 
     } 
    } 
    File oneFileInFolder = new File(tmpFile, "fileOne.txt"); 
    if (oneFileInFolder.exists()){ 
     //do something 
    } 
} 

Вот тестовый код, который я написал:

static File mockFile; 
@Before 
public void setUp() throws Exception { 
    //....some code 
    mockFolder = mock(File.class); 
    when(mockFolder.getPath()).thenReturn("Folder"); 
    when(mockFolder.exists()).thenReturn(true); 
    whenNew(File.class).withParameterTypes(String.class).withArguments(anyString()).thenReturn(mockFolder); 
    //...some code 
} 

Но когда я отлаживать TestCase, я все еще вижу реальную папку, созданную в моем PWD. Я не хочу создавать папки, когда я запускаю свои тестовые файлы. Есть идеи?

+0

Бросьте 'verify (mockFolder) .mkdir()' и посмотрите, что произойдет - может быть, ваш макет не используется? Или, может быть, вы настроили Мокито на настоящие методы? В этом примере вы никогда не закрывали 'mkdir()'. –

ответ

4

Поскольку вы не указали это в вашем вопросе, нижеследующее может отсутствовать:

@PrepareForTest(ClassYoureCreatingTheFileInstanceIn.class) 

Согласно Wiki: Примечание

, что вы должны подготовить класс создания нового экземпляра MyClass для тестирования, а не MyClass. Например. если класс, выполняющий новый MyClass(), называется X, тогда вам нужно будет @PrepareForTest (X.class), чтобы для того, чтобы NewNew работала.

Другими словами, X - это класс, который содержит foo() в вашем примере.

Смежные вопросы