Java 使用PowerMockito模拟文件
我有以下测试代码:Java 使用PowerMockito模拟文件,java,mockito,powermock,Java,Mockito,Powermock,我有以下测试代码: @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 Pat
@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() {}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({Logger.class,Files.class})
公共类TestClass{
私有静态最终列表=新ArrayList(){{
添加(“某些条目”);
}};
私有静态最终路径路径=Path.get(“/tmp/foo”);
@以前
公共作废设置(){
spy(Files.class);
doReturn(LIST).when(Files.class,“readAllLines”,PATH,Charset.defaultCharset());
}
@试验
公共无效测试(){}
}
上面的代码在最后一行抛出一个“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)
在
UnixFileSystemProvider.newbytechnel(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(Files.java:2677)位于
java.nio.file.Files.readAllLines(Files.java:3033)位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于
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(本机方法)位于
invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:129)
在
org.junit.internal.runners.MethodRoadie.runbeforesthentestthenuter(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)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
在
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runbeforesthenTestthenAfter(PowerMockJUnit44RunnerDelegateImpl.java:282)
在
org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
位于org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.invokeTestMethod(powermockjunit44runnerdelegateinpl.java:207)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.runMethods(powermockjunit44runnerdelegateinpl.java:146)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl$1.run(powermockjunit44runnerdelegateinpl.java:120)
在
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
在
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
在
org.powermock.modules.junit4.internal.impl.powermockjunit44runnerdelegateinpl.run(powermockjunit44runnerdelegateinpl.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)
我不太明白我在这里做错了什么。我发现了问题:问题是文件是系统类的
请显示实际测试以及stacktrace。我刚刚添加了stacktrace。你能更新链接吗?PowerMock项目转移到Github我相信您链接到的文章已经转移到