2014-10-10 4 views
3

У меня есть следующий код теста:Mock Файлы с PowerMockito

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Logger.class, Files.class}) 
public class TestClass { 

    private static final List<String> LIST = new ArrayList<String>() {{ 
    add("some entry"); 
    }}; 
    private static final Path PATH = Paths.get("/tmp/foo"); 

    @Before 
    public void setup() { 
    PowerMockito.spy(Files.class); 
    PowerMockito.doReturn(LIST).when(Files.class, "readAllLines", PATH, Charset.defaultCharset()); 
    } 

    @Test 
    public void test() {} 
} 

Код выше бросает «NoSuchFileException» на последней строке. Здесь StackTrace:

java.nio.file.NoSuchFileException:/TMP/Foo в sun.nio.fs.UnixException.translateToIOException (UnixException.java:86) на sun.nio.fs .UnixException.rethrowAsIOException (UnixException.java:102) на sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:107) на sun.nio.fs.UnixFileSystemProvider.newByteChannel (UnixFileSystemProvider.java:214) в файле java.nio.file.Files.newByteChannel (Files.java:317) в java.nio.file.Files.newByteChannel (Files.java:363) в java.nio.file.spi.FileSystemProvider.newInputStream (FileSystemProvider.java:380) в java.nio.file.Files.newInputStream (Files.java:108) в java.nio.file.Files.newBufferedReader (файлы .java: 2677) при java.nio.file.Files.readAllLines (Files.java:3033) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 57) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.invoke (Method.java:606) в org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation (WhiteboxImpl.java:2014) по адресу org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod (WhiteboxImpl.java:885) на org.powermock.reflect.internal.WhiteboxImpl.invokeMethod (WhiteboxImpl.java:859) в org.powermock.reflect.Whitebox. invokeMethod (Whitebox.java:466) в org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when (PowerMockitoStubberImpl.java:106) в TestClass.setup (TestClass.java:29) в sun.reflect. NativeMethodAccessorImpl.invoke0 (Родной метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method. invoke (Method.java:606) a т org.junit.internal.runners.MethodRoadie.runBefores (MethodRoadie.java:129) на org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters (MethodRoadie.java:93) на org.powermock.modules. junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest (PowerMockJUnit44RunnerDelegateImpl.java:294) на org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper (PowerMockJUnit47RunnerDelegateImpl.java:127) в орг. powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest (PowerMockJUnit47RunnerDelegateImpl.java:82) в org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters (PowerMockJUnit44RunnerDelegateImpl.java:282) на org.junit.internal.runners.MethodRoadie.runTest (MethodRoadie.java:84) в орг .junit.internal.runners.MethodRoadie.run (MethodRoadie.java:49) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod (PowerMockJUnit44RunnerDelegateImpl.java:207) на org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods (PowerMockJUnit44RunnerDelegateImpl.java:146) на org.powermock.modules.junit4.internal.impl. PowerMockJUnit44RunnerDelegateImpl $ 1.run (PowerMockJUnit44RunnerDelegateImpl.java:120) на org.junit.internal.runners.ClassRoadie.runUnprotected (ClassRoadie.java:34) на org.junit.internal.runners.ClassRoadie.runProtected (ClassRoadie.java : 44) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run (PowerMockJUnit44RunnerDelegateImpl.java:118) в org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run (JUnit4TestSuiteChunkerImpl.java:101) на org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run (AbstractCommonPowerMockRunner. Java: 53) на org.powermock.modules.junit4.PowerMockRunner.run (PowerMockRunner.java:53) на org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) на org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) на org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) на org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) на org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197)

Я совсем не могу получить то, что я делаю неправильно здесь.

+3

Пожалуйста, покажите фактический тест, а также StackTrace. –

+0

Я только что добавил stacktrace – CrazyDoggg

ответ

3

Я нашел проблему: проблема в том, что Files является системным классом.

https://github.com/powermock/powermock/wiki/mocksystem

+0

Можете ли вы обновить ссылку? Проект PowerMock переместился в github – Olaf

+0

Я верю, что статья, с которой вы связались, перешла на https://github.com/jayway/powermock/wiki/mocksystem – Olaf

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