一种奇怪的错误,执行一个junit测试用例,代码却执行了很多遍

最近用junit做接口测试的时候,项目框架是ssm,只执行了一次测试用例,但是service实现层根据日志,发现执行了几十次到上百次,直到栈溢出才会停止。

这是测试用例:

    @Test
    public void testGetTest() {
        try {
            CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
             String url = "http://localhost:8080/project/test/getTest";
            HttpPost post = new HttpPost(url);

            List<NameValuePair> formparams = new ArrayList<NameValuePair>();
            formparams.add(new BasicNameValuePair("testid", "100001"));
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);

            post.setEntity(entity);

            CloseableHttpResponse closeableHttpResponse = closeableHttpClient.execute(post);
            if (closeableHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String result = EntityUtils.toString(closeableHttpResponse.getEntity(), "UTF-8");
                System.out.println(result);
            }
            closeableHttpResponse.close();
            closeableHttpClient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

接口:

@RequestMapping(value = "/getTest", method = { RequestMethod.POST, RequestMethod.GET })
    @ResponseBody
    public Map<String, Object> getTest(String testid) throws Exception {
        TestDetail message = new TestDetail ();
        if(!TestUtils.validateNumber(testid, -1)) {
            message.setMsg("id不合法");
            message.setResult(1);
            return PropertyUtilsExtend.describe(message);
        }
        message = this.testService.getTestById(Long.valueOf(testid));

        if(message == null) {
            message = new TestDetail();
            message.setMsg("获取信息失败");
            message.setResult(99);
        } else {
            message.setMsg("获取信息成功");
            message.setResult(0);
        }

        return PropertyUtilsExtend.describe(message);
    }

实现层:

@Override
    @Transactional(readOnly = true)
    public TestDetail getTestById(long testid) {
        TestDetail test= this.testDao.query(testid);
        test.setItems(this.testmodeDao.query(testid));
        return null;
    }

执行测试用例:

这里写图片描述

图片中显示测试用例一直在执行。

console循环输出信息:

at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) ~[javax.servlet-api-3.1.0.jar:3.1.0]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[javax.servlet-api-3.1.0.jar:3.1.0]
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845) ~[?:?]
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1689) ~[?:?]
    at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:64) ~[log4j-web-2.5.jar:2.5]
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676) ~[?:?]
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581) ~[?:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[?:?]
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566) ~[?:?]
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) ~[?:?]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) ~[?:?]
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) ~[?:?]
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) ~[?:?]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) ~[?:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[?:?]
    at org.eclipse.jetty.server.Dispatcher.include(Dispatcher.java:117) ~[?:?]
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:160) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1246) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1029) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:973) ~[spring-webmvc-4.2.6.RELEASE.jar:4.2.6.RELEASE]

最后栈溢出:

Caused by: java.lang.StackOverflowError
    at java.lang.String.startsWith(String.java:1434) ~[?:1.8.0_91]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:461) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:494) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:469) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:494) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:469) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:494) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:469) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.removeAttribute(Dispatcher.java:494) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]
    at org.eclipse.jetty.server.Dispatcher$IncludeAttributes.setAttribute(Dispatcher.java:469) ~[jetty-server-9.3.11.v20160721.jar:9.3.11.v20160721]

没有具体的错误信息,通过排除法判断,发现:

TestDetail test= this.testDao.query(testid);

这句代码执行出错,正常执行,即使报错,也应该只执行一次,但是这里好像一直在循环执行这一句,一直报同样的错误信息(console循环输出信息),知道溢出为止,目前还不知道为什么会出现这个问题,但是可以肯定有代码执行出错了,下次再遇见,也有查找问题的方向了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值