Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 测试仅在运行套件时获取HttpMediaTypeNotAcceptableException_Java_Spring - Fatal编程技术网

Java 测试仅在运行套件时获取HttpMediaTypeNotAcceptableException

Java 测试仅在运行套件时获取HttpMediaTypeNotAcceptableException,java,spring,Java,Spring,我对Spring的发展还不熟悉,我正在努力学习。安装了Netbeans 11.1并克隆了它,并试图使此VideoController通过 我很惊讶为什么testAddGetVideo()测试在组中运行时失败,但在单独运行时通过。为此挣扎了几天。通读SO和其他帖子 testAddGetVideo在测试套件中失败,但个别测试通过(向下滚动查看下文) 在堆栈跟踪中有一个 org.springframework.web.HttpMediaTypeNotAcceptableException testA

我对Spring的发展还不熟悉,我正在努力学习。安装了Netbeans 11.1并克隆了它,并试图使此VideoController通过

我很惊讶为什么testAddGetVideo()测试在组中运行时失败,但在单独运行时通过。为此挣扎了几天。通读SO和其他帖子

testAddGetVideo在测试套件中失败,但个别测试通过(向下滚动查看下文)

在堆栈跟踪中有一个

org.springframework.web.HttpMediaTypeNotAcceptableException

testAddGetVideo():

在这里传输视频失败

发送无效id-9223372036854775808是测试的一部分

getVideos()失败。(日志输出的顺序有偏差)

…堆栈跟踪继续

但是,当我在不重新启动服务器的情况下立即运行单个测试时,它通过了

---------------newVideo---------------
video 3 at http://localhost:8080/video/3/data
===================
---------------getVideos---------------
3 videos
===================
个别测试通过


不确定原因,但下面的更改修复了它。问题可能与自动测试有关

@Test
public void testGetNonExistantVideosData() throws Exception {

    long nonExistantId = getInvalidVideoId();

    try{
        Response r = videoSvc.getData(nonExistantId);
        assertEquals(404, r.getStatus());
    }catch(RetrofitError e){
        assertEquals(404, e.getResponse().getStatus());
    }
}
我的方法签名如下我将方法更改为在作为参数传入无效id时返回null,并且仅在传入有效id且二进制视频mpeg数据成功写入HttpServletResponse.Outputstream时返回VideoStatus

换句话说,执行
响应.sendError()
也需要
返回null

   @RequestMapping(value = VIDEO_DATA_PATH, method = RequestMethod.POST)
    public @ResponseBody VideoStatus uploadVideo(@PathVariable("id") long id, @RequestParam("data") MultipartFile data, HttpServletResponse response) {
        VideoStatus status = new VideoStatus(VideoStatus.VideoState.READY);
---------------newVideo---------------
video 1 at http://localhost:8080/video/1/data
===================
---------------uploadVideo---------------
1 for video 1 data data
===================
---------------downloadVideo---------------
1 for video 1
===================
---------------newVideo---------------
video 2 at http://localhost:8080/video/2/data
===================
---------------getVideos---------------
2 videos
===================
---------------uploadVideo---------------

-9223372036854775808 for non existent video 
2019-09-09 14:50:28.988  WARN 16804 --- [tp1776486598-21] org.eclipse.jetty.server.Response        : Committed before 406 null
2019-09-09 14:50:28.988  WARN 16804 --- [tp1776486598-21] .w.s.m.s.DefaultHandlerExceptionResolver : Handling of [org.springframework.web.HttpMediaTypeNotAcceptableException] resulted in Exception

java.lang.IllegalStateException: Committed
    at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1242)
    at org.eclipse.jetty.server.Response.sendError(Response.java:567)
    at org.eclipse.jetty.server.Response.sendError(Response.java:544)
    at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMediaTypeNotAcceptable(DefaultHandlerExceptionResolver.java:246)
    at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.doResolveException(DefaultHandlerExceptionResolver.java:119)
    at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:138)
    at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:75)
---------------newVideo---------------
video 3 at http://localhost:8080/video/3/data
===================
---------------getVideos---------------
3 videos
===================
@Test
public void testGetNonExistantVideosData() throws Exception {

    long nonExistantId = getInvalidVideoId();

    try{
        Response r = videoSvc.getData(nonExistantId);
        assertEquals(404, r.getStatus());
    }catch(RetrofitError e){
        assertEquals(404, e.getResponse().getStatus());
    }
}
   @RequestMapping(value = VIDEO_DATA_PATH, method = RequestMethod.POST)
    public @ResponseBody VideoStatus uploadVideo(@PathVariable("id") long id, @RequestParam("data") MultipartFile data, HttpServletResponse response) {
        VideoStatus status = new VideoStatus(VideoStatus.VideoState.READY);