Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t从模拟GridFSDBFile读取模拟输入流_Java_Spring_Mongodb_Junit_Mockito - Fatal编程技术网

Java Can';t从模拟GridFSDBFile读取模拟输入流

Java Can';t从模拟GridFSDBFile读取模拟输入流,java,spring,mongodb,junit,mockito,Java,Spring,Mongodb,Junit,Mockito,我正在使用JUnit、Mockito和Spring的MockMvc编写一个单元测试,测试从服务读取GridFSDBFile,然后写入响应内容的能力。 它不能从模拟的GridFSDBFile读取模拟的InputStream,但它可以读取模拟的长度?!我错在哪里 控制器: 。。。 @控制器 公共类FileReadController{ @自动连线 私有IFileService文件服务; @RequestMapping(value=“/v0/files/{fileid}”,method=Request

我正在使用JUnit、Mockito和Spring的MockMvc编写一个单元测试,测试从服务读取GridFSDBFile,然后写入响应内容的能力。 它不能从模拟的GridFSDBFile读取模拟的InputStream,但它可以读取模拟的长度?!我错在哪里

控制器:

。。。
@控制器
公共类FileReadController{
@自动连线
私有IFileService文件服务;
@RequestMapping(value=“/v0/files/{fileid}”,method=RequestMethod.GET)
public@ResponseBody void read(@PathVariable String fileid,HttpServletResponse)引发IOException{
GridFSDBFile file=this.fileService.find(fileid);
res.setContentLength((int)file.getLength());
copy(file.getInputStream,res.getOutputStream());
System.out.println(“文件长度:+file.getLength());
System.out.println(“文件内容:+IOUtils.toString(file.getInputStream()));
}
}
...
控制器测试:

。。。
公共类FileReadControllerTest{
私有MockMvc-MockMvc;
@嘲弄
私有文件服务mockFileService;
@注射模拟
私有文件读取控制器mockReadController;
@以前
public void setUp()引发异常{
initMocks(this);
this.mockMvc=MockMvcBuilders.standaloneSetup(mockReadController.build();
}
@试验
public void shouldReadSuccessfully()引发异常{
GridFSDBFile file=createFile();
String expectedString=IOUtils.toString(file.getInputStream());
当(mockFileService.find(anyString())。然后返回(file);
this.mockMvc.perform(get(“/v0/files/fileId”))
.andExpect(状态().isOk())
.andExpect(content().string(expectedString));
}
私有GridFSDBFile createFile()引发IOException{
String content=“这是假的内容”;
GridFSDBFile=mock(GridFSDBFile.class);
当(file.getInputStream())。然后返回(IOUtils.toInputStream(content));
when(file.getLength()).thenReturn((long)content.length());
当(file.getContentType()).thenReturn(“应用程序/x-rpm”);
返回文件;
}
}
...
这就是失败:

java.lang.AssertionError:预期响应内容:但为:
控制台输出:

。。。
档案长度:24
文件内容://nothing
...
当我在调试模式下调查file.getInputStream()时,它显示了其中的一些内容:

file.getInputStream();
-buf[116,104,105,115,32,…]
-数到24
-马克0
-位置24
所以我不明白为什么我不能将这个inputStream转换成字符串,即使其中有内容

某些依赖项

org.springframework.boot:springbootstarterweb:0.5.0.M4
org.apache.commons:commons io:1.3.2
junit:junit:4.11
org.mockito:mockito all:1.9.5
org.springframework:spring测试:3.2.4.RELEASE

您的问题可能是由mockReadController的不正确初始化引起的。当mockReadController预期为null时,您可以在setUp()方法的开头调用MockitoAnnotations.initMocks(this)。因此,不可能将mockFileService注入其中

试着这样做:

@Before
public void setUp() throws Exception {
    mockReadController = Mockito.mock(FileReadController.class);    
    MockitoAnnotations.initMocks(this);
    //your other stuff
}