一种奇怪的错误,执行一个junit测试用例,代码却执行了很多遍
2017-11-28 10:46
585 查看
最近用junit做接口测试的时候,项目框架是ssm,只执行了一次测试用例,但是service实现层根据日志,发现执行了几十次到上百次,直到栈溢出才会停止。
这是测试用例:
接口:
实现层:
执行测试用例:
图片中显示测试用例一直在执行。
console循环输出信息:
最后栈溢出:
没有具体的错误信息,通过排除法判断,发现:
这句代码执行出错,正常执行,即使报错,也应该只执行一次,但是这里好像一直在循环执行这一句,一直报同样的错误信息(console循环输出信息),知道溢出为止,目前还不知道为什么会出现这个问题,但是可以肯定有代码执行出错了,下次再遇见,也有查找问题的方向了。
这是测试用例:
@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循环输出信息),知道溢出为止,目前还不知道为什么会出现这个问题,但是可以肯定有代码执行出错了,下次再遇见,也有查找问题的方向了。
相关文章推荐
- 测试用例顺序执行时,若上一个用例未退出iframe,下一个测试用例默认需要一次退出iframe,否则定位iframe出现错误
- Spring 测试代码的写法以及一个c3p0的错误
- Junit框架使用(3)--按照顺序执行测试用例
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
- lua开源测试框架busted源码学习(二)--代码框架分析和用例执行流程
- Junit--按照顺序执行测试用例
- mocha框架下,异步测试代码错误造成的问题----用例超时错误
- python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,并不像某些人写的每次只执行一个测试类,具体看代码,附上整个project代码
- 对基于JUnit和Ant的测试用例执行过程使用Kieker(AspectJ)进行监控的方法
- Ant/Junit: 利用Ant执行测试用例并生成测试报告
- 最近 因为 一个take阻塞 一直占有当前获取的lock 导致奇怪的现象 这里把自己的测试代码贴下 免得下次犯错
- 使用Ant运行JUnit测试用例时,报java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing的一种解决方案
- 【selenium】python+selenium+unittest,关于每次执行完一个测试用例都关闭浏览器等时间较长的问题之解决方案
- 使用AspectJ监控测试用例执行,无法产生监控数据的一种解决方案
- IHttpModule接口事件执行 获取Session 找了很多国内的都不对,从国外转过来一个测试可用的
- 使用Junit测试一个 spring静态工厂实例化bean 的例子,所有代码都没有问题,但是出现java.lang.IllegalArgumentException异常
- Python自动化测试例子--一个简单的自动化测试用例脚本--批量执行测试用例
- myeclipse14使用junit4,添加junit的libaray时source显示not found,执行测试案例时报“no Junit tests found”错误
- 在开启多线程时,用junit测试,到连接数据库代码时,junit自动停止,而且没有报错误。
- 经常在网上搜怎样获得外网的ip,代码几乎都一样,但测试,都出现错误!最后找了一个既蠢既笨的终极解决方案