2013-04-19 8 views
5

के साथ चलाते समय विफल हो जाती है हम जीडब्ल्यूटी-टेस्ट-यूटिल का उपयोग करके लिखे गए यूनिट परीक्षणों के सेट से हमारे जीडब्ल्यूटी एप्लिकेशन के लिए कवरेज रिपोर्ट जेनरेट करने का प्रयास कर रहे हैं। परियोजना एक बहु-मॉड्यूल मेवेन परियोजना है। हम अपने कवरेज और उल्लंघन की जानकारी उत्पन्न करने और एकत्रित करने के लिए जेनकींस पर सोनार-प्लगइन का उपयोग कर रहे हैं।gwt-test-utils इकाई jacoco

जब निर्माण नौकरियों सभी GWT इकाई परीक्षण सामान्य निर्माण के हिस्से के रूप गुजरती हैं, लेकिन जब सोनार प्लगइन परीक्षण वे सभी निम्न त्रुटि के साथ विफल करने का प्रयास फिर से चलाएं चलाएँ:

initializationError(uk.co.card.gwt.retailpost.client.dialog.productmodify.CurrencyEditDialogTest) Time elapsed: 0 sec <<< ERROR! com.googlecode.gwt.test.exceptions.GwtTestException: Error while generating gwt-test-utils prerequisites at com.googlecode.gwt.test.internal.GwtFactory.(GwtFactory.java:113) at com.googlecode.gwt.test.internal.GwtFactory.initializeIfNeeded(GwtFactory.java:45) at com.googlecode.gwt.test.internal.junit.AbstractGwtRunner.(AbstractGwtRunner.java:30) at com.googlecode.gwt.test.GwtRunner.(GwtRunner.java:19) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:250) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 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.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) Caused by: com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries) at com.google.gwt.dev.cfg.ModuleDef.checkForSeedTypes(ModuleDef.java:559) at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:363) at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:354) at com.googlecode.gwt.test.internal.GwtFactory.createCompilationState(GwtFactory.java:151) at com.googlecode.gwt.test.internal.GwtFactory.(GwtFactory.java:106) ... 25 more

के माध्यम से देख रहे हैं जेनकींस और वर्कस्पेस निर्देशिकाओं से शेष कंसोल आउटपुट, मैं लॉग फ़ाइल का पता नहीं लगा सकता हूं कि "com.google.gwt.core.ext.UnableToCompleteException: (पिछली लॉग प्रविष्टियां देखें)" का संदर्भ है।

क्या किसी को भी ऐसी ही समस्या का सामना करना पड़ा है और जानता है कि सोनार को जीडब्ल्यूटी-टेस्ट-यूटिल को सफलतापूर्वक चलाने के लिए कैसे प्राप्त किया जाए, या कम से कम एक विचार होगा कि अपवाद में उल्लिखित पिछली लॉग प्रविष्टियों को कब देखना है।

संपादित करें: आगे के प्रयोग के बाद यह मुद्दा जैकोको के कारण होता है। बस इकाई jacoco साथ instrumented परीक्षण (और कोई शामिल सोनार के साथ) चलाने का प्रयास कर ही त्रुटि में परिणाम


** संपादित करें:

pom.xml

<build> 
pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.jacoco</groupId> 
        <artifactId>jacoco-maven-plugin</artifactId> 
        <version>0.6.2.201302030002</version> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.12.4</version> 
        <configuration>       
         <excludedGroups combine.self="override" /> 
         <reuseForks>true</reuseForks> 
         <argLine>-Xmx1024m -XX:MaxPermSize=256m ${jacoco.agent.argLine}</argLine> 
        </configuration> 
       </plugin> 
</plugins> 
     </pluginManagement> 
     <plugins>    
      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <configuration> 
        <propertyName>jacoco.agent.argLine</propertyName> 
        <destFile>${sonar.jacoco.itReportPath}</destFile> 
        <append>true</append> 
        <excludes> 
         <exclude>*.osgi.*</exclude> 
         <exclude>*.apache.*</exclude> 
         <exclude>*.sourceforge.*</exclude> 
         <exclude>*.junit.*</exclude> 
         <!-- Test support code does not need to be covered --> 
         <exclude>uk.co.card.retailpost.clientintegration.utilities.*</exclude> 
        </excludes> 
        <classDumpDir>temp/classes</classDumpDir> 
       </configuration> 
       <executions> 
        <execution> 
         <id>agent</id> 
         <goals> 
          <goal>prepare-agent</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>report</id> 
         <goals> 
          <goal>report</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
+0

से मैं की खोज डिबगिंग के बाद, कि समस्या Maven + jacoco के साथ है। यदि आप एक्लिप्स (ecl एम्मा प्लगइन) से जैकोको चलाते हैं - तो आपको कोड कवरेज रिपोर्ट दिखाई देगी। –

+0

हमें रात के जेनकिंस बिल्ड जॉब के हिस्से के रूप में चलाने के लिए नौकरी की ज़रूरत है जो परिणामी कवरेज आंकड़ों की रिपोर्ट करने के लिए सोनार का उपयोग कर रहा है। कोई विचार है कि हम कवरेज कैसे उत्पन्न कर सकते हैं, और फिर उस सेट में मेवेन/सोनार में इसका पुन: उपयोग कर सकते हैं? आवेदन ग्रहण में org.apache.osgi ढांचे के साथ होने वाली समस्याओं के कारण नेटबीन में बनाया गया है। – user2075499

उत्तर

3

से नमूना जैसा कि मैंने टिप्पणियों में उल्लेख किया है पुस्तकालयों को मैकोको-निश्चित-प्लगइन के साथ जैकोको के लिए अलग-अलग क्रम में लोड किया गया है। इस समस्या को हल करने के लिए अपना खुद का धावक लिखें (com.googlecode.gwt.test.GwtRunner को बढ़ाता है) और थ्रेड संदर्भ क्लासलोडर के लिए क्लासलोडर बदलें।

import com.googlecode.gwt.test.GwtRunner; 

    public class MyGwtRunner extends GwtRunner { 

     static { 
      URLClassLoader classLoader = (URLClassLoader) MyGwtRunner.class.getClassLoader(); 

      try { 
       URL[] urls = getClassPath(); 
       ClassLoader cl = URLClassLoader.newInstance(urls, classLoader); 
       Thread.currentThread().setContextClassLoader(cl); 
      } catch (MalformedURLException e) { 
       throw new IllegalStateException(e); 
      } 

     } 

     public MyGwtRunner(Class<?> clazz) throws Throwable { 
      super(clazz); 
     } 

     private static URL[] getClassPath() throws MalformedURLException { 
      String classPath = System.getProperty("java.class.path"); 
      String pathSeparator = System.getProperty("path.separator"); 
      String[] array = classPath.split(pathSeparator); 

      List<URL> files = new ArrayList<URL>(); 
      for (String a : array) { 
       files.add(new File(a).toURI().toURL()); 
      } 
      return files.toArray(new URL[files.size()]); 
     } 

    } 

अपने परीक्षणों में GwtRunner ओवरराइड MyGwtRunner

@GwtModule("com.my.module.GwtTestUtils") 
@RunWith(MyGwtRunner.class) 
public abstract class AbstractGwtJunit extends GwtTest { 
.... 
} 
+0

अभी भी इस कॉन्फ़िगरेशन के साथ सोनार नौकरी में एक ही समस्या हो रही है। हालांकि मैं शुरुआती टेस्ट रन को कवर करने के लिए जैकोको प्राप्त करने और रिपोर्ट का पुन: उपयोग करने के लिए सोनार की स्थापना करने की कोशिश करूंगा। एक बार मैंने कोशिश की है तो टिप्पणी करेंगे। – user2075499

+0

मैंने इसे ऊपर दिए गए प्रश्न में जोड़ा गया पोम सेटिंग का उपयोग करके इसकी कोशिश की, और मुझे अभी भी वही त्रुटि दिखाई दे रही है। Gwt-test-utils यूनिट परीक्षणों के लिए कवरेज बनाने और उत्पन्न करने के लिए मुझे जैकोको प्राप्त करने के लिए अतिरिक्त तर्क पैरामीटर का उपयोग करना पड़ा। – user2075499

+0

मैंने इसे केवल जेनकींस के साथ परीक्षण किया। सफलता के साथ अंत बनाएं, लेकिन रिपोर्ट गुम है ... मैं जांच करूंगा क्यों। –

संबंधित मुद्दे