2015-11-09 32 views
6

Per quanto riguarda le seguenti informazioni:Cobertura: come coprire primavera-dati interfacce @Repository

https://stackoverflow.com/a/14601831/704246

Cobertura non si interfacce strumento

Mi piacerebbe sapere come aggiungere la primavera -date interfacce ai risultati della copertura, dal momento che le classi di implementazione @Repository vengono dichiarate e istanziate da Spring al runtime.

Considerate seguente interfaccia:

// src/main/java/my/package/MyObjectRepository.java 

@Repository 
public interface MyObjectRepository { 
    MyObject findMyObjectByCodeAndName(String code, String name); 
} 

e seguente test:

// src/test/java/my/package/MyObjectRepositoryTest.java 

// @RunWith(SpringJUnit4ClassRunner.class) + Spring configuration 
public class MyObjectRepositoryTest { 

    @Autowired 
    private MyObjectRepository myObjectRepository; 

    @Test 
    public void myTest() { 
     myObjectRepository.findMyObjectByCodeAndName("foo","bar"); 
    } 
} 

Non mi dispiace passare a Jacoco, ma ho letto che non è così interfacce di uno strumento,.

Come possono essere coperti i seguenti casi? Lo stesso problema/domanda si verifica su Mybatis Mapper, che sono dichiarati come interfacce ma nessuna dichiarazione concreta di classe Java che li implementa viene scritta dallo sviluppatore ma dal framework in fase di esecuzione.

Ho aperto un ticket ma sto ancora aspettando una risposta.

risposta

0

Se ho capito bene, un'interfaccia non può essere coperta. Le interfacce servono solo a definire il contratto e non contengono comandi di "runtime". E gli strumenti di copertura del codice misurano solo le linee che sono raggiungibili dai test in esecuzione. Ditelo in un altro modo, solo la dichiarazione del campo, il costruttore o il corpo del metodo possono essere coperti.

Un'eccezione può essere un'interfaccia Java8 che contiene alcuni metodi predefiniti.