【发布时间】:2018-01-16 09:11:45
【问题描述】:
我正在尝试熟悉 JUnit/Mockito 并使用以下方法尝试一些单元测试:
public FSDataInputStream getObj(String hName, Path p) throws IOException {
String myKey = pathToKey(hName, p);
FileStatus status = memoryCache.getStatus(p.toString());
if (status == null) {
status = getStatus(hName, p, "getObj");
}
if (status.isDirectory()) {
throw new FileNotFoundException("Can't open " + path
+ " because it is a directory");
}
InputStream inputStream = new InputStream(bucket, myKey,
status.getLen(), client, readAhead, inputPolicy);
return new FSDataInputStream(inputStream);
}
如果 status.isDirectory == true,我希望测试是否抛出了 fileNotFoundException。
我相信我必须调用 getObj() 方法,并且对于 if (status.isDirectory()),我必须确保该值为 true。我认为这是通过when(fileStatus.isDirectory()).thenReturn(true); 完成的。我不确定如何调用该方法并确保它发生。
到目前为止,我已经有了这个 JUnit,但它似乎不正确,因为它返回以下错误:
public class ClientTest {
MemoryCache memoryCache = mock(MemoryCache.class);
FileStatus fileStatus = mock(FileStatus.class);
@Rule
public final ExpectedException exception = ExpectedException.none();
@Test
public void getObjTest() throws Exception {
Path path = new Path("xyz://aa-bb-cc/data7-1-23-a.txt");
when(memoryCache.getFileStatus(path.toString())).thenReturn(fileStatus);
when(fileStatus.isDirectory()).thenReturn(true);
exception.expect(FileNotFoundException.class);
}
}
java.lang.AssertionError:预期的测试会抛出 java.io.FileNotFoundException 的实例 在 org.junit.Assert.fail(Assert.java:88) 在 org.junit.rules.ExpectedException.failDueToMissingException(ExpectedException.java:263) 在 org.junit.rules.ExpectedException.access$200(ExpectedException.java:106) 在 org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:245) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:91) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) 在 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87) 在 org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50) 在 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) 在 org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122) 在 org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106) 在 org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 在 org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
谁能告诉我我做错了什么?
【问题讨论】:
-
你为什么第一次评论是什么时候?似乎是正确的选择
-
我在实验的时候把它注释掉了。当我发布查询时,我一定忘记取消注释。会更新。
标签: java unit-testing junit mockito junit4