概述下情况maven eclipse开发,jdk1.7
一个项目分成3个模块,独立打包
xxx下面是3个子项目xx.dao,xx.service,xx.proxy
调用关系是Proxy->service->dao
其中dao和Service打包和单元测试均正常,开发到Proxy进行单元测试的时候爆出如下异常
五月 27, 2017 3:25:25 下午 org.springframework.test.context.TestContextManager retrieveTestExecutionListeners
信息: @TestExecutionListeners is not present for class [class xx.xxProxyTest]: using defaults.
看了下junit的异常更加诡异
java.lang.StackOverflowError
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:39)
at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.apache.log4j.Category.<init>(Category.java:57)
at org.apache.log4j.Logger.<init>(Logger.java:37)
at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.apache.log4j.Category.<init>(Category.java:57)
我甚至调了eclipse的配置文件,发现无效,又试下其他一些无效的方法,最终通过将dao和Service引入proxy才成功跑通了测试用例,记录下来,避免再犯。
补上单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/test/resources/config/spring-placeholder.xml" })
public class xxxProxyTest {
@Resource
xxxxServiceProxy xxxxServiceProxy;
@Test
public void testSelectCustaccount() {
List list = xxxxServiceProxy.selectCustaccount(1);
System.out.println("1111111111" + JSON.toJSONString(list));
}
}
注意,spring-placeholder.xml配置的是自动扫描,所以xxxxServiceProxyImpl还是需要加上@Resource注解的,不然还是这个报错。