Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 Spring控制器断点和JUnit_Java_Spring_Junit - Fatal编程技术网

Java Spring控制器断点和JUnit

Java Spring控制器断点和JUnit,java,spring,junit,Java,Spring,Junit,我有一个带有Junit测试的SpringREST应用程序。我在Eclipse中运行应用程序并启动测试。如果我在Junit类中设置断点,它会正常工作并停止执行,但是如果我直接在被调用的控制器中设置断点,则不会发生任何事情。 我做错了什么 @Test public void testAddVideoData() throws Exception { Video received = videoSvc.addVideo(video); VideoStatus status = vide

我有一个带有Junit测试的SpringREST应用程序。我在Eclipse中运行应用程序并启动测试。如果我在Junit类中设置断点,它会正常工作并停止执行,但是如果我直接在被调用的控制器中设置断点,则不会发生任何事情。 我做错了什么

@Test
public void testAddVideoData() throws Exception {
    Video received = videoSvc.addVideo(video);
    VideoStatus status = videoSvc.setVideoData(received.getId(),
            new TypedFile(received.getContentType(), testVideoData));
    assertEquals(VideoState.READY, status.getState());

    Response response = videoSvc.getData(received.getId());
    assertEquals(200, response.getStatus());

    InputStream videoData = response.getBody().in();
    byte[] originalFile = IOUtils.toByteArray(new FileInputStream(testVideoData));
    byte[] retrievedFile = IOUtils.toByteArray(videoData);
    assertTrue(Arrays.equals(originalFile, retrievedFile));
}
这就是我要设置断点的方法:

@RequestMapping(value = "/video/{id}/data" , method = RequestMethod.POST)
public @ResponseBody VideoStatus addVideoData(AtomicLong id, @RequestParam("data")
MultipartFile videoData) {

    VideoStatus videoStatus= new VideoStatus(VideoState.PROCESSING);


    try {
        videoDataMgr = VideoFileManager.get();
        Video video = videos.get(id);

        if(!videoDataMgr.hasVideoData(video)) {
            InputStream in = videoData.getInputStream();
            videoDataMgr.saveVideoData(video, in);
        }
        videoStatus.setState(VideoState.READY);


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // SAVE IT TO DISK

    return videoStatus;

}

由于应用程序和测试在两个不同的JVM中运行,您必须(使用Eclipse):

  • 对于测试:“作为Java应用程序运行”
  • 对于应用程序:“作为Java应用程序进行调试”,在需要时设置断点

你可以发布你的Junit测试以及你所做的模拟。如果你运行应用程序,然后启动测试,然后应用程序在与测试分离的JVM中运行。因此,在运行测试时使用调试模式将允许调试在测试JVM中运行的测试,而不是在单独的JVM中运行的控制器。你也需要在调试模式下启动应用程序。当然,所有这些都是猜测,因为我们不知道测试是什么样子。我也尝试过在调试模式下运行应用程序,但它会在其他地方停止运行beginning@JBNizet你的解决方案确实有效。谢谢你可以写一份正式回复,我会接受它作为解决方案。