2013-07-26 10 views
5

Ho iniziato a utilizzare JMockit e sono molto nuovo a TDD e mocking. Mi piace usare la copertura del codice per assicurarmi di aver testato tutte le linee per una data classe/metodo.Errore durante l'utilizzo di EclEmma (plug-in Eclipse) con JMockit (solo con Delegate())

Mi sono imbattuto nel seguente errore quando provavo JMockit (funzionalità Delegate()) e copertura del codice. Sto includendo sia un test passivo che fallito.

Non so se sto facendo qualcosa di sbagliato?

Vorrei sapere se qualcun altro ha riscontrato questo problema e se sono disponibili soluzioni o correzioni?

Non sono nemmeno sicuro se si tratta di un problema JMockit o EclEmma. Grazie.

La mia configurazione:

  • OS: Windows XP
  • JDK-JRE: 1.7.0
  • JUnit: 4.11
  • JMockit: 1.3
  • EclEmma: 2.2.1.201306092145
  • Eclipse: 3.6

Fallimento Trace:

java.lang.IllegalArgumentException: Nessun metodo compatibile trovato: getType (java.lang.Integer) a com.ps.jmockit.samples.DelegateCoverageTest $ Dog.getAnimalType (DelegateCoverageTest.java: 99) a com.ps.jmockit.samples.DelegateCoverageTest.coverageFails (DelegateCoverageTest.java:71) a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo natale) a java.lang.reflect.Method.invoke (Metodo. java: 601) a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo nativo) a java.lang.reflect.Method.invoke (Method.java:601) a org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:49) a org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) a org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197)


Codice: (coverageFails() mostrerà l'errore precedente quando viene utilizzato con EclEmma)

package com.ps.jmockit.samples; 

import static org.hamcrest.MatcherAssert.*; 
import static org.hamcrest.Matchers.*; 

import mockit.Delegate; 
import mockit.Expectations; 
import mockit.Mocked; 

import org.junit.Test; 

/** 
* As of 7/25/2013, if I try to run the EclEmma coverage tool, it fails for {@link #coverageFails()} 
*/ 
public class DelegateCoverageTest 
{ 

    @Mocked 
    Animal fakeAnimal; 

    @Test 
    public void coverageWorks() 
    { 
     final String fake = "Fake"; 

     new Expectations() 
     { 
      { 
       DelegateCoverageTest.this.fakeAnimal.getType(1); 
       result = fake; 
      } 
     }; 

     //Arrange 
     final Dog dog = new Dog(); 

     // Act 
     final String animalType = dog.getAnimalType(this.fakeAnimal); 

     // Assert 
     assertThat(animalType, is(fake)); 
    } 

    @Test 
    public void coverageFails() 
    { 
     final String one = "One"; 
     final String two = "Two"; 

     new Expectations() 
     { 
      { 
       DelegateCoverageTest.this.fakeAnimal.getType(anyInt); 
       result = new Delegate() 
       { 
        @SuppressWarnings("unused") 
        String aDelegateMethod(final int input) 
        { 
         return input == 1 
           ? one 
           : two; 
        } 
       }; 
      } 
     }; 

     //Arrange 
     final Dog dog = new Dog(); 

     // Act 
     final String animalType = dog.getAnimalType(this.fakeAnimal); 

     // Assert 
     assertThat(animalType, is(one)); 
    } 


    //----------------- SUPPORTING CLASSES -----------------// 

    interface Animal 
    { 
     String getType(int input); 
    } 

    class Mammal implements Animal 
    { 
     @Override 
     public String getType(final int input) 
     { 
      return "Mammal"; 
     } 
    } 

    class Dog 
    { 

     public String getAnimalType(final Animal animal) 
     { 
      return animal.getType(1); 
     } 
    } 

} 
+0

Perché è un problema con EclEmma se si ottiene l'IllegalArgumentException in JMockit? – pimpf0r

+0

E come devi usare "@SuppressWarnings (" inutilizzato ")"? – pimpf0r

+0

@ pimpf0r Ho già menzionato nel mio post "Non sono nemmeno sicuro che si tratti di un problema di JMockit o di EclEmma". Per quanto riguarda il "SuppressWarnings" è solo per evitare gli avvertimenti Eclipse, dal momento che eclipse non riconosce il codice viene utilizzato. –

risposta

Problemi correlati