配置单元测的Classpath时的一个比较奇怪的问题:
首先看一下单元测试的Classpath配置:eclipse编辑器右键点击->Run As...->Run Configurations->Classpath标签页如下:
图1
从图1可以看出,TestCase的Classpath配置分为两部分:
Bootstrap Entries 是 Jre类库;
User Entries 是用户配置的第三方类库,同时这里又包括项目的类库,即Default Classpath,其是项目Build Path的所有Jar包。及TestCase使用到的其它Jar包。
我进行单元测试时发现了一个比较奇怪的问题,即在User Entries 根下配置Log4j.jar包时如果其在项目的Default Classpath上边时单元测试用例不会报异常,如图2:
图2
但是如果把Log4j.jar移到项目的Default Classpath下边(如图3)时会有异常如下图4.
图3
Caused by: java.lang.NoSuchMethodError: org.apache.log4j.Logger.trace(Ljava/lang/Object;)V
at org.jbpm.internal.log.Log4jLog.trace(Log4jLog.java:74)
at org.jbpm.pvm.internal.wire.xml.WireParser.<clinit>(WireParser.java:283)
at org.jbpm.pvm.internal.cfg.ConfigurationParser.<init>(ConfigurationParser.java:46)
at org.jbpm.pvm.internal.cfg.ConfigurationParser.<clinit>(ConfigurationParser.java:49)
at org.jbpm.pvm.internal.cfg.ConfigurationImpl.parse(ConfigurationImpl.java:139)
at org.jbpm.pvm.internal.cfg.ConfigurationImpl.setResource(ConfigurationImpl.java:118)
at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine(SpringHelper.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
... 39 more
图4
这究竟是怎么回事呢?