2014-12-05 95 views
2

我使用Jmockit在Eclipse中爲我的代碼和Eclemma插件提供代碼覆蓋。 由於某種原因,我不是爲了得到報道。其他使用PowerMock的項目,Eclemma顯示代碼覆蓋率很好。但與Jmockit似乎有一些問題。與Eclemma一起使用Jmockit

以下是例外:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
java.lang.reflect.InvocationTargetException 
    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 sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323) 
    at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:348) 
Caused by: java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields) 
    at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method) 
    at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:150) 
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:245) 
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:239) 
    at mockit.internal.RedefinitionEngine.redefineMethods(RedefinitionEngine.java:166) 
    at mockit.internal.RedefinitionEngine.setUpStartupMock(RedefinitionEngine.java:132) 
    at mockit.internal.startup.JMockitInitialization.setUpInternalStartupMock(JMockitInitialization.java:55) 
    at mockit.internal.startup.JMockitInitialization.loadInternalStartupMocksForJUnitIntegration(JMockitInitialization.java:38) 
    at mockit.internal.startup.JMockitInitialization.initialize(JMockitInitialization.java:25) 
    at mockit.internal.startup.Startup.initialize(Startup.java:68) 
    at mockit.internal.startup.Startup.agentmain(Startup.java:62) 
    ... 6 more 
5 Dec, 2014 6:40:44 PM com.nn.ood.common.props.PropertyReader 
WARNING: No configuration file(s) found for application ca and layer be. 
Agent failed to start! 
Exception in thread "Attach Listener" 
+0

一些google搜索後,我發現下面的鏈接(https://github.com/jacoco/jacoco/pull/35),其中提到有Jmockit的某些碼版本之間的不兼容問題和Eclemma。但那是在2012年。還沒有確定呢?任何更新?? – anzaan 2014-12-05 13:18:15

+0

它已被修復。你正在使用哪些版本? – 2014-12-05 13:58:59

+0

@RogérioEclemma - 2.3.2,Jmockit - 0.999.15,Eclipse Kepler Service Release 2 – anzaan 2014-12-06 12:26:04

回答

2

以下解決方案爲我工作:

  1. 升級的jmockit版本1.9。請注意,組ID具有 以來 版本改爲從「com.googlecode.jmockit」「org.jmockit」 1.9
  2. 確保您將jmockit依賴的junit之前在你的pom在

的依賴pom.xml的是這樣的:

 <dependency> 
     <groupId>org.jmockit</groupId> 
     <artifactId>jmockit</artifactId> 
     </dependency> 
     <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     </dependency>