【发布时间】:2018-01-15 08:22:35
【问题描述】:
我正在编写一个Junit来测试Client.java中的以下方法:
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, "getObject");
}
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 == null然后getStatus()被调用,如果status.isDirectory(),则抛出FileNotFoundException
我是 Junit 的新手,所以不完全确定自己在做什么,但据我所知,我认为我需要模拟以下内容:
- 列表项
- 客户
- 状态
- 输入流
- 可能是内存缓存
到目前为止,这是我所拥有的:
@Before
public final void before() {
private COSAPIClient myClient;
private String myBucket;
FileStatus myStatus;
InputStream myInputStream;
myClient = PowerMockito.mock(AmazonS3.class);
myInputStream = PowerMockito.mock(InputStream.class);
myFileStatus = PowerMockito.mock(FileStatus.class);
}
@Test
public void getObjTest() throws Exception {
URI uri = new URI("xyz://aa-bb-cc/data7-1-23-a.txt");
String hName = "xyz://aa-bb-cc/";
Path p = new Path("cos://aa-bb-cc/data7-1-23-a.txt");
Configuration conf = new Configuration();
myClient = spy(new Client(uri, conf));
myStatus = spy(new FileStatus());
myMemoryCache.getStatus(p.toString());
InputStream = spy(new InputStream(myBucket, objectKey, 300, myClient, 12345678910L, myInputPolicy));
}
它在我的程序的这一行返回一个 NullPointerError:
FileStatus status = memoryCache.getStatus(p.toString());
我想知道是否有人可以建议我是否/我做错了什么以及我应该如何解决这个问题?
【问题讨论】:
-
与 3.状态 你的意思是
getStatus()? -
什么是
memoryCache?它是如何初始化/注入你的类的?你在哪里调用getObj到你的班级? -
克里斯特尔斯 - 是的。 Sergii Bishyr - 我不确定你在问什么,但我确信我所做的是不正确的。
标签: java unit-testing junit mocking mockito