亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅當套件運行時測試才會出現 HttpMediaTypeNotAcceptableException

僅當套件運行時測試才會出現 HttpMediaTypeNotAcceptableException

長風秋雁 2023-07-19 15:35:48
我是 Spring 開發的新手,正在嘗試學習。安裝了 Netbeans 11.1 并克隆了這個git 存儲庫并嘗試讓這個 VideoController 通過。我很驚訝為什么 testAddGetVideo() 測試在組中運行時失敗,但在單獨運行時卻通過。測試套件在這里。糾結了好幾天了。通讀SO和其他帖子。testAddGetVideo 在測試套件中失敗,但個別測試通過(向下滾動查看下文)在堆棧跟蹤中有一個org.springframework.web.HttpMediaTypeNotAcceptableException測試添加獲取視頻():@Testpublic void testAddGetVideo() throws Exception {? ? videoSvc.addVideo(video);? ? Collection<Video> stored = videoSvc.getVideoList();? ? assertTrue(stored.contains(video));}它調用的我的 VideoController 方法:/**?* getVideos?*?* @return Collection<Video>?*/@RequestMapping(value = VIDEO_SVC_PATH, method = RequestMethod.GET)public @ResponseBody Collection<Video> getVideos(HttpServletResponse response) {? ? System.out.println("---------------getVideos---------------");? ? System.out.println(videos.size() + " videos");? ? System.out.println("===================");? ? response.setContentType("application/json");? ? response.setStatus(200);? ? return videos.values();}/**?* newVideo?*?* @param v?* @return Video?*/@RequestMapping(value = VIDEO_SVC_PATH, method = RequestMethod.POST)public @ResponseBody Video newVideo(@RequestBody Video v) {? ? System.out.println("---------------newVideo---------------");? ? checkAndSetId(v);? ? String url = getDataUrl(v.getId());? ? v.setDataUrl(url);? ? videos.put(v.getId(), v);? ? System.out.println("video " + v.getId() + " at " + v.getDataUrl());? ? System.out.println("===================");? ? return v;}視頻服務public static final String VIDEO_SVC_PATH = "/video";public static final String VIDEO_DATA_PATH = VIDEO_SVC_PATH + "/{id}/data";/**?* This endpoint in the API returns a list of the videos that have?* been added to the server. The Video objects should be returned as?* JSON.??*??* To manually test this endpoint, run your server and open this URL in a browser:?* http://localhost:8080/video?*??* @return?*/
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

不知道為什么,但下面的更改修復了它。問題可能出在自動化測試上。


@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。


換句話說,做 aresponse.sendError()也需要 a return 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);


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號